美文网首页
聊聊当业务数据时间和预期的不一样,可以从哪些方向排查

聊聊当业务数据时间和预期的不一样,可以从哪些方向排查

作者: linyb极客之路 | 来源:发表于2021-06-01 11:48 被阅读0次

前言

前些天业务部门的开发同事遇到了一个奇怪的bug,首先他们有个业务已经入库的创建时间和服务器时间相差了8个小时,其次当这个时间显示到前端后,这个时间竟然和服务时间相差了好几个月。

今天就这个问题,来做个复盘,来聊聊当业务数据时间和预期的不一样,可以从哪些方向排查

排查方向

1、数据库和服务器的时间不一致

1、查看jdbc链接配置的时区,即serverTimezone的参数配置

注: 本文的时区都以东八区为基准,且数据库为mysql

示例:

jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC

如上图配置的时区是UTC,这样就和东八区相差8个小时。如果按这种配法,当我们在代码层采用new Date()的方式,则落到数据库的时间会比我们预期的时间相差8个小时。此时我们可以把jdbc上配置的时区参数改成

serverTimezone=Asia/Shanghai

2、查看数据库默认的时区配置

show variables like '%time_zone%';

[图片上传失败...(image-16571a-1622519305125)]
由图可以看出,此时数据库时区默认配置不是东八区。我们可以通过如下方法进行修改

  • a、通过命令
##修改mysql全局时区为东八区
set global time_zone = '+8:00'; 
 ##修改当前会话时区
set time_zone = '+8:00';

注: 通过命令行,无需重启mysql服务,但当mysql服务再次被重启,则上面的配置就会消失

  • b、通过配置文件

linux系统则编辑my.cnf ,填入如下内容

[mysqld]
// 设置默认时区
default-time_zone='+8:00'

window的系统则编辑my.ini,填入的内容和linux一样

注: 修改完配置后,需要重启mysql服务

业务部门的创建时间相差8个小时,就是因为他们业务的创建时间统一是通过数据库配置默认时间,当时他们数据库默认时区是UTC,因此相差了8个小时。后来通过调整数据库时区解决这个问题

2、容器和服务器的时间不一致

1、进入容器内部查看时间

docker exec -it 【容器ID或者NAME】 bin/bash -c date

2、如果是容器是已经生成

可以直接把宿主机的localtime拷贝到docker容器中,前提是宿主机的时间也是对的。命令如下

docker cp /etc/localtime 【容器ID或者NAME】:/etc/localtime

或者直接修改docker容器的时间也可以。进入容器内容,执行date -s

3、容器生成前,直接通过dockerfile配置【推荐】

FROM adoptopenjdk/openjdk8
VOLUME /tmp
#ENV JAVA_OPTS="-Dcom.sun.management.jmxremote.port=39083 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
ENV JAVA_OPTS=""
COPY localtime /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
COPY demo-biz/target/demo-service-biz-*.jar app.jar
ENTRYPOINT [ "sh", "-c", "exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

注: 因业务的dockerfile是统一根据模板生成,因此就没这个问题

3、时间格式配置不正确

业务部门为了统一处理时间格式,在代码中做了如下配置

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        //格式化json数据格式
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        //序列化时避免精度丢失,转换为字符串
        SerializeConfig serializeConfig = SerializeConfig.globalInstance;
        serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
        serializeConfig.put(Long.class, ToStringSerializer.instance);
        serializeConfig.put(Long.TYPE, ToStringSerializer.instance);

        fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue);
        fastJsonConfig.setSerializeConfig(serializeConfig);
        fastJsonConfig.setDateFormat("yyyy-HH-dd HH:mm:ss");
        fastConverter.setFastJsonConfig(fastJsonConfig);

        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastMediaTypes.add(MediaType.APPLICATION_JSON);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);

        converters.add(0,fastConverter);
    }


}

眼尖的朋友,可能发现了那个时间格式,长得和正常的格式是不一样的。谁能想到,那个奇葩的bug,竟然是因为不小心把时间格式写错了。解决的方法就很简单了,

fastJsonConfig.setDateFormat("yyyy-HH-dd HH:mm:ss");

改成

fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");

总结

上面就介绍几种排查方向,尤其是最后一种,因为时间格式写错,导致时间显示错误

相关文章

  • 聊聊当业务数据时间和预期的不一样,可以从哪些方向排查

    前言 前些天业务部门的开发同事遇到了一个奇怪的bug,首先他们有个业务已经入库的创建时间和服务器时间相差了8个小时...

  • 数据思维

    数据思维就是得有电子化的数据,有你预期的目标和方向数据和方向之间建立关联有哪些xy和变量最终产生价值数据到价值中间...

  • 数仓构建流程

    1.首先进行数据相关的调研,主要包含业务调研和需求分析,通过业务调研来把握可以实现哪些需求,哪些需求目前业务方面的...

  • 常见的大数据分析模型

    今天我们主要为大家讲解在做大数据可视化时,有哪些常见得到数据分析模型。 数据模型可以从两个角度来区分:数据和业务。...

  • 一个系统,搞定闲鱼服务端复杂问题告警-定位-快速处理

    引言 服务端问题排查(服务稳定性/基础设施异常/业务数据不符合预期等)对于开发而言是家常便饭,问题并不可怕,但是每...

  • 举个栗子!Tableau 技巧(186):多少子类别订单的利润在

    利润分析是常见的业务分析场景,通过对销售数据分析,可以快速查看利润和利润率的情况,比如哪些产品盈利、哪些亏损;哪些...

  • 数据产品能力模型

    本篇文章从几个方面聊聊数据产品需要的能力,以下为个人看法,欢迎交流沟通。 一、业务能力 让一切业务数据化,一切数据...

  • 面试题之大数据

    在你所在的公司(行业、领域),正在用大数据处理哪些业务?可以用大数据实现哪些价值?答:所在领域资讯平台,用大数据处...

  • MySQL日期和时间数据类型及格式

    本文问题 MySQL中包含哪些代表日期和时间的数据类型? 日期和时间可以用哪些格式表示? 各种日期和时间的有效值范...

  • 业务指标有哪些?

    嗨!前边两篇文章我们聊了用户指标和行为指标,今天呢我们来聊聊业务指标 一、常用的业务指标有哪些? 总量:GMV 、...

网友评论

      本文标题:聊聊当业务数据时间和预期的不一样,可以从哪些方向排查

      本文链接:https://www.haomeiwen.com/subject/dvewsltx.html