成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

聊聊當(dāng)業(yè)務(wù)數(shù)據(jù)時間和預(yù)期的不一樣,可以從哪些方向排查

數(shù)據(jù)庫
前些天業(yè)務(wù)部門的開發(fā)同事遇到了一個奇怪的bug,首先他們有個業(yè)務(wù)已經(jīng)入庫的創(chuàng)建時間和服務(wù)器時間相差了8個小時,其次當(dāng)這個時間顯示到前端后,這個時間竟然和服務(wù)時間相差了好幾個月。

前言

前些天業(yè)務(wù)部門的開發(fā)同事遇到了一個奇怪的bug,首先他們有個業(yè)務(wù)已經(jīng)入庫的創(chuàng)建時間和服務(wù)器時間相差了8個小時,其次當(dāng)這個時間顯示到前端后,這個時間竟然和服務(wù)時間相差了好幾個月。

[[403163]]

今天就這個問題,來做個復(fù)盤,來聊聊當(dāng)業(yè)務(wù)數(shù)據(jù)時間和預(yù)期的不一樣,可以從哪些方向排查

排查方向

1、數(shù)據(jù)庫和服務(wù)器的時間不一致

1、查看jdbc鏈接配置的時區(qū),即serverTimezone的參數(shù)配置

注: 本文的時區(qū)都以東八區(qū)為基準(zhǔn),且數(shù)據(jù)庫為mysql

示例:

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

如上圖配置的時區(qū)是UTC,這樣就和東八區(qū)相差8個小時。如果按這種配法,當(dāng)我們在代碼層采用new Date()的方式,則落到數(shù)據(jù)庫的時間會比我們預(yù)期的時間相差8個小時。此時我們可以把jdbc上配置的時區(qū)參數(shù)改成

  1. serverTimezone=Asia/Shanghai 

2、查看數(shù)據(jù)庫默認(rèn)的時區(qū)配置

  1. show variables like '%time_zone%'

 

由圖可以看出,此時數(shù)據(jù)庫時區(qū)默認(rèn)配置不是東八區(qū)。我們可以通過如下方法進(jìn)行修改

a、通過命令

 

  1. ##修改mysql全局時區(qū)為東八區(qū) 
  2. set global time_zone = '+8:00';  
  3.  ##修改當(dāng)前會話時區(qū) 
  4. set time_zone = '+8:00'

注: 通過命令行,無需重啟mysql服務(wù),但當(dāng)mysql服務(wù)再次被重啟,則上面的配置就會消失

b、通過配置文件

linux系統(tǒng)則編輯my.cnf ,填入如下內(nèi)容

 

  1. [mysqld] 
  2. // 設(shè)置默認(rèn)時區(qū) 
  3. default-time_zone='+8:00' 

window的系統(tǒng)則編輯my.ini,填入的內(nèi)容和linux一樣

注: 修改完配置后,需要重啟mysql服務(wù)

業(yè)務(wù)部門的創(chuàng)建時間相差8個小時,就是因為他們業(yè)務(wù)的創(chuàng)建時間統(tǒng)一是通過數(shù)據(jù)庫配置默認(rèn)時間,當(dāng)時他們數(shù)據(jù)庫默認(rèn)時區(qū)是UTC,因此相差了8個小時。后來通過調(diào)整數(shù)據(jù)庫時區(qū)解決這個問題

2、容器和服務(wù)器的時間不一致

1、進(jìn)入容器內(nèi)部查看時間

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

2、如果是容器是已經(jīng)生成

可以直接把宿主機的localtime拷貝到docker容器中,前提是宿主機的時間也是對的。命令如下

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

或者直接修改docker容器的時間也可以。進(jìn)入容器內(nèi)容,執(zhí)行date -s

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

 

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

注: 因業(yè)務(wù)的dockerfile是統(tǒng)一根據(jù)模板生成,因此就沒這個問題

3、時間格式配置不正確

業(yè)務(wù)部門為了統(tǒng)一處理時間格式,在代碼中做了如下配置

 

  1. @Configuration 
  2. public class WebConfig implements WebMvcConfigurer { 
  3.     @Override 
  4.     public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { 
  5.         FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter(); 
  6.         //格式化json數(shù)據(jù)格式 
  7.         FastJsonConfig fastJsonConfig = new FastJsonConfig(); 
  8.         //序列化時避免精度丟失,轉(zhuǎn)換為字符串 
  9.         SerializeConfig serializeConfig = SerializeConfig.globalInstance; 
  10.         serializeConfig.put(BigInteger.class, ToStringSerializer.instance); 
  11.         serializeConfig.put(Long.class, ToStringSerializer.instance); 
  12.         serializeConfig.put(Long.TYPE, ToStringSerializer.instance); 
  13.  
  14.         fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue); 
  15.         fastJsonConfig.setSerializeConfig(serializeConfig); 
  16.         fastJsonConfig.setDateFormat("yyyy-HH-dd HH:mm:ss"); 
  17.         fastConverter.setFastJsonConfig(fastJsonConfig); 
  18.  
  19.         List<MediaType> fastMediaTypes = new ArrayList<>(); 
  20.         fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); 
  21.         fastMediaTypes.add(MediaType.APPLICATION_JSON); 
  22.         fastConverter.setSupportedMediaTypes(fastMediaTypes); 
  23.  
  24.         converters.add(0,fastConverter); 
  25.     } 
  26.  
  27.  

眼尖的朋友,可能發(fā)現(xiàn)了那個時間格式,長得和正常的格式是不一樣的。誰能想到,那個奇葩的bug,竟然是因為不小心把時間格式寫錯了。解決的方法就很簡單了,

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

改成

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

總結(jié)

上面就介紹幾種排查方向,尤其是最后一種,因為時間格式寫錯,導(dǎo)致時間顯示錯誤

責(zé)任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2012-03-07 17:24:10

戴爾咨詢

2012-12-20 10:17:32

IT運維

2021-12-23 15:11:46

Web 3.0元宇宙Metaverse

2021-11-25 16:30:07

CICD數(shù)據(jù)科學(xué)

2011-03-14 16:51:24

2016-05-09 18:40:26

VIP客戶緝拿

2017-05-25 15:02:46

聯(lián)宇益通SD-WAN

2015-10-19 12:33:01

華三/新IT

2018-05-09 15:42:24

新零售

2009-02-04 15:43:45

敏捷開發(fā)PHPFleaPHP

2009-12-01 16:42:27

Gentoo Linu

2011-02-28 10:38:13

Windows 8

2009-06-12 15:26:02

2016-03-24 18:51:40

2020-05-15 10:16:43

HttpHttps網(wǎng)絡(luò)協(xié)議

2015-08-04 14:49:54

Discover

2009-07-07 10:44:14

多態(tài)

2022-05-05 21:47:32

Linuxls 命令

2019-01-03 14:39:08

Oracle甲骨文ORACLE

2010-12-07 09:37:20

數(shù)據(jù)中心
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天综合国产 | 一本久久a久久精品亚洲 | 精品国产一区二区国模嫣然 | 久久久久久成人 | 久草青青草 | 亚洲精品自在在线观看 | 九九九久久国产免费 | 亚洲午夜网 | 亚洲国产精品一区二区三区 | 秋霞电影院午夜伦 | 亚洲欧美国产毛片在线 | 久久久性 | 中文字幕欧美一区二区 | 日韩国产在线 | 免费的日批视频 | 九一在线| 日韩精品一区二区三区 | 1204国产成人精品视频 | 18性欧美 | 亚洲视频精品 | 久久国产成人精品国产成人亚洲 | 天天爽天天操 | 亚洲精品www久久久久久广东 | 国产综合久久 | 综合久| 国产亚洲精品精品国产亚洲综合 | 欧美日韩一区在线 | 久久一区二区视频 | 国产精品夜夜春夜夜爽久久电影 | 91免费看片神器 | 91精品成人久久 | 青青久草 | 啪啪网页 | 国产91丝袜 | 精品粉嫩超白一线天av | 国产乱码精品一区二区三区忘忧草 | 日韩欧美一区二区三区在线播放 | 天堂中文av | 日韩中文字幕av | 国产在线www| 久久久不卡网国产精品一区 |