springboot如何统一设置时区
作者:阿良@ 发布时间:2022-01-26 18:16:39
springboot 统一设置时区
控制springboot服务的时区为东八区
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// 设置时区为上海时区,即东八区
TimeZone.setDefault(TimeZone.getTimeZone(ZoneId.SHORT_IDS.get("CTT")));
SpringApplication.run(Application.class, args);
}
}
以下是测试例子
springboot 启动时候设置时区,如下代码所示
@SpringBootApplication
public class EwPbServerApplication {
public static void main(String[] args) {
TimeZone timeZone = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(timeZone);
SpringApplication.run(EwPbServerApplication.class, args);
}
}
测试请求接口获取时间
@GetMapping("test")
@ApiOperation(value = "测试时间", httpMethod = "GET")
public void test() {
//当前时间为 2022-09-06 17:46
//启动类设置时区后,获取当前时间
Date date = new Date();
DateTime date1 = DateUtil.date();
LocalDateTime localDateTime = LocalDateTime.now();
//设置时区为-东八区
LocalDateTime.now(ZoneId.of("Asia/Shanghai"))
log.info("date=={}", date);
log.info("date1=={}", date1);
log.info("localDateTime=={}", localDateTime);
log.info("now=={}", now);
// 2022-09-06 09:47:01.385 xxxx : date==Tue Sep 06 09:47:01 UTC 2022
// 2022-09-06 09:47:01.385 xxxx : date1==2022-09-06 09:47:01
// 2022-09-06 09:47:01.386 xxxx : localDateTime==2022-09-06T09:47:01.381
// 2022-09-06 09:47:01.386 xxxx : now==2022-09-06T17:47:01.385
}
由测试结果得知,springboot 启动时设置时区之后全局生效,但是优先级小于手动设置
springboot mysql 时区问题总结
寻找原因
后端开发中常见的几个时区设置
第一个设置点配置文件 spring.jackson.time-zone
第二个设置点 高版本SpringBoot版本 mysql-connector-java 用的是8.X,mysql8.X的jdbc升级了,增加了时区(serverTimezone)属性,并且不允许为空。
第三个设置点 mysql time_zone变量
词义
serverTimezone临时指定mysql服务器的时区
spring.jackson.time-zone 设置spring默认时区
system_time_zone mysql服务器时区 ,time_zone默认System追随system_time_zone
几种情况
1、time_zone 为 System,serverTimezone为GMT+8,jackson.time-zone未定义
插入情况
再查询此条记录
个人觉得Spring默认时区为格林尼治时区,web服务器当前时区为东八区,进行加8操作。
2、set GLOBAL time_zone = '+3:00',serverTimezone为GMT+8,jackson.time-zone为GMT+8
createTime 为 timestamp类型
修改配置后,需要重启SpringBoot
新增情况
数据库中显示
查询记录
个人理解,serverTimezone设置覆盖掉了mysql的time_zone变量,跟SpringBoot会话时区还是东8
3、上述环境,不重启SpringBoot,直接改变time_zone = '+5:00'
改变后,上条记录往后调整2小时。
SpringBoot查询,一样
说明,timeStamp类型存储的是格林尼治时间,加上time_zone时区
当time_zone变化时,会话没结束,serverTimeZone东8还是对应time_zone的东3
SpringBoot插入
个人理解,serverTimeZone东8 还是和 time_zone 东3对应,但是插入发现 当前time_zone已经改成东5,就加2小时。
重启SpringBoot,重新查询
虽然,mysql变量time_zone为+5,但是重启后,serverTimeZone直接覆盖,设置时间区间为东8
重新把time_zone改回东3
改回重新打开表,发现又回来了
不启动SpringBoot,查询数据,还是老样子
此时,添加一条数据。
往前推了2小时。
SpringBoot查询
重启SpringBoot,查出来就是库中数据。
4、serverTimezone为GMT,jackson.time-zone为GMT+8,time_zone为东3
serverTimeZone为格林尼治时间,web服务器为东八,所以直接推迟8小时
取出来刚好反一下,显示正常。
此时,修改serverTimeZone为东八。
5、时间字段类型为timestamp,使用默认current_timestamp, serverTimezone为GMT,jackson.time-zone为GMT+8,time_zone为东3
因mysql时区东三时间为
插入后数据为
但是serverTimeZone为格林尼治时间,jackson.time-zone为东八,加8小时
6、时间字段类型为datetime,serverTimezone为GMT+8,jackson.time-zone为GMT+8,time_zone为东3
插入
库中
查询
time_zone从东3修改为东5
重新打开库
不启动SpringBoot
重启SpringBoot,还是一样。
修改serverTimeZone为GMT,其他不改动
查询
来源:https://blog.csdn.net/AA8310888193aaa/article/details/126769929


猜你喜欢
- 小菜今年计算机专业大四了,学了不少软件开发方面的东西,也学着编了些小程序,踌躇满志,一心要找一个好单位。当投递了无数份简历后,终于收到了一个
- 多说无益,贴代码:/** * 校验银行卡卡号 * * @param cardId &nbs
- Configuration configuration = ConfigurationManager.OpenExeConfiguratio
- > 因为我的工作要用kotlin所以今天在这里给大家总结一下关于全局语言切换的kotlin语言实现实现,很简单,希望在这里可以帮助到有
- 目录前言1、饿汉式(线程安全)⭐2、懒汉式(线程不安全)⭐3、懒汉式(加锁)4、懒汉式(双重校验锁)⭐5、单例模式(静态内部类)6、单例模式
- 一开始我就纳闷了,怎么调试都只是一个光溜溜的界面,右侧的工具栏都没有如图:就一个光秃秃的界面,什么都没有,这就对调试很不方便于是我就试了试各
- 一、 lib文件的简介.lib是一种文件后缀,是Windows操作系统的库文件,有静态lib和动态lib之分:1)、静态lib文件
- android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Androi
- 一、Quartz的特点* 按作业类的继承方式来分,主要有以下两种:1.作业类继承org.springframework.scheduling
- 相应的类库可在我的资源页面中找到,关于类成员的说明可通过对象浏览器查看函数说明Imports BitOperatorLibrary.Shif
- 导入Jstl标签库<%@ taglib uri="http://java.sun.com/jsp/jstl/core&quo
- 前言最近公司有了新的业务,把现有Flutter Android项目应用到TV上去,这不,Asscre的活就来了。本文详细说明Flutter
- FeignClient接口调用无参字符串参数对象参数拟定客户端调用服务端接口,直接放代码啦,参考格式即可。1、无参服务端方法:
- 前言最近在学习Kotlin这门语言,在项目开发中,运用到了单例模式。因为其表达方式与Java是不同的。所以对不同单例模式的实现进行了分别探讨
- 背景当一个项目分了很多模块,很多个服务的时候,一些公共的配置就需要统一管理了,于是就有了元数据驱动!简介什么是Calcite?是一款开源SQ
- 本文实例为大家分享了Unity3D实现物体旋转缩放移动的具体代码,供大家参考,具体内容如下由于项目运行在安卓上,运用到了插件,比较麻烦。你们
- 今天带大家实现滑动返回效果.,具体内容如下所示:先看看效果图:因为没有具体内容,也没有简书的图片资源,所以稍微简陋了点.但是依然不妨碍我们的
- SpringBoot整合第三方技术一、整合Junit新建一个SpringBoot项目使用@SpringBootTest标签在test测试包内
- 生命太短暂,不要去做一些根本没有人想要的东西。本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术
- WPF前台代码展示<Window.Resources> <local:Source x:Key=