首页 > 编程知识 正文

数据比对找出不一样的(不同列数据重复比对)

时间:2023-05-03 19:53:28 阅读:103551 作者:3689

前言

前几天,业务部的开发同事遇到了一个奇怪的bug。首先,在已投入存储的业务的创建时间和服务器时间之间存在8小时的时间差。其次,当这个时间显示在前端时,它与服务时间相差几个月。

今天,就这个问题,我们来回顾一下,谈谈当业务数据时间与预期不同时,我们可以检查哪个方向。

00-1010

排查方向

1.检查jdbc链接配置的时区,即serverTimezone的参数配置。

注:本文时区基于东八区,数据库为mysql。

示例:

JDBC : my SQL ://localhost:3306/demo?UseUnicode=小蘑菇的真正成就=utf8 SuSE SSL=false server time zone=utc

上图配置的时区为UTC,距离东八区8小时。按照这个方法,当我们在代码层采用新的Date()方法时,登陆数据库的时间会比我们预期的晚8个小时。此时,我们可以将jdbc上配置的时区参数更改为

服务器时区=亚洲/上海

2.检查数据库的默认时区配置

显示像“%time_zone%”这样的变量;

从图中可以看出,此时数据库时区的默认配置不是东八区。我们可以通过以下方式对其进行修改。

通过命令# #将mysql全球时区更改为东部时区8

设置全局时区=' 8:00 ';

# #修改当前会话时区

设置time _ zone=' 8:00

注意:通过命令行,不需要重启mysql服务,但是当mysql服务再次重启时,上面的配置就会消失。

b、通过配置文件linux系统,编辑my.cnf并填写以下内容

[mysqld]

//设置默认时区

默认值-time_zone=' 8:00 '

Window的系统编辑my.ini,填充与linux相同的内容。

注意:修改配置后,需要重新启动mysql服务。

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

00-1010 1.检查容器内的时间

日期

2.如果容器已经生成

您可以直接将主机的localtime复制到docker容器中,前提是主机的时间也是正确的。订单如下

docker CP/etc/local time[容器ID或名称] :/etc/localtime

或者直接修改docker容器的时间。输入容器的内容并执行日期

3.在生成容器之前,直接通过dockerfile配置[推荐]。

FROM采用openjdk/openjdk8

音量/tmp

# ENV JAVA _ OPTS='-Dcom . sun . management . JMX remote . port=39083-Dcom . sun . management . JMX remote . SSL=false-Dcom . sun . management . JMX remote . authenticate=false '

' ENV JAVA_OPTS=' '

COPY localtime /etc/localtime

运行回声'亚洲/上海'/等/时区

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是根据模板统一生成的,所以不存在这个问题。

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

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

@配置

公共类WebConfig实现了WebMvcConfigurer {

@覆盖

public void configureMessageConverters(lishttpmessageconverter?转换器){ 0

fastjsonhtpmessageconverter=new fastjsonhtpmessageconverter();

//格式化json数据格式

FastJsonConfig FastJsonConfig=new FastJsonConfig();

//避免序列化时丢失精度,并将其转换为字符串。

serializen fig serializen fig=serializen fig . global instance;

serializen fig . put(BigInteger . class,ToStringSerializer . instance);

serialize fig . put(long . class,ToStringSerializer . instance);

序列化输入(长。类型,tostringserializer . instance);

fastjsonconfig . setserializer features(Serializer feature。WriteMapNullValue);

fastjsonconfig . setserialiseconfig(serialiseconfig);

fastjsonconfig . setdateformat(' yyyy-HH-DD HH :mm 3360s ');

快速转换器。setfastjsonconfig(fastjsonconfig);

list mediatype fast mediatypes=new ArrayList();

快速媒体类型.添加(媒体类型).应用程序_JSON_UTF8:

快速媒体类型.添加(媒体类型).应用程序_JSON:

快速转换器。setsupportedmediatypes(fast mediatypes);

转换器。添加(0,快速转换器):

}

}

云娥,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,陈鉴真的?陈鉴真的。吴世荣(签名),阿云bug(错误),不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不,不。张伯伦医生,

fastjsonconfig。setdateformat(' yyyy-hh-DD hh 3330mm 3330 ss ');

104;

fastjsonconfig。setdateformat(' yyyy-mm-DD hh 3330mm 3330 ss ');

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

年欧洲足球锦标赛朱庇特?朱庇特?朱庇特,吴经盛?吴经盛?吴经盛?吴经盛?吴经盛?吴经盛?吴经熊?吴经熊?吴经熊?吴经熊?吴经熊?吴经熊?吴经熊?吴经熊?吴经熊?吴经熊?吴经熊,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,范仲淹,是不是

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。