0. 主要内容:
0.1 解决问题
- 解决SpringBoot使用localDateTime、LocalDate这些类导致在配置文件中用dateFormat不生效的问题
- 解决SpringBoot+Mybatis由于由于服务器时区为CST而导致的Mybatis获取出来的日期获取过后加了12的问题
0.1 运行环境
- 本机 MacOS 10.14
- 数据库 Mysql 5.7
- 服务器 CentOS 7
- SpringBoot 2.1.7.RELEASE
- Mybatis: starter版本 2.1.0
1. 在SpringBoot中使用LocalDateTime的正确""姿势""
- 我喜欢先说正确的
1.1 配置文件
spring:
jackson:
# timeZone: GMT+8 无效参数
# dateFormat: yyyy-MM-dd HH:mm:ss 也是无效的
1.2 依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.7</version>
</dependency>
- 上面第一个包就不说了
- 第二个包是用来支持JSR310的数据类型的,我们可以理解用于Jackson支持为Local类型的时间的
1.3 配置类
@Configuration
public class LocalDateConfig {
/**
* Date格式化字符串
*/
private static final String DATE_FORMAT = "yyyy-MM-dd";
/**
* DateTime格式化字符串
*/
private static final String DATETIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
/**
* Time格式化字符串
*/
private static final String TIME_FORMAT = "HH:mm:ss";
/**
* 添加自定义
* @return Jackson2ObjectMapperBuilderCustomizer
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
return builder -> builder
.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT)))
.serializerByType(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DATE_FORMAT)))
.serializerByType(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(TIME_FORMAT)))
.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DATETIME_FORMAT)))
.deserializerByType(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DATE_FORMAT)))
.deserializerByType(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(TIME_FORMAT)));
}
}
- 设置完毕
- 运行项目就可以看到API返回的LocalDateTime数据变为:yyyy-MM-dd HH:mm:ss 格式的了。
1. Mysql使用CST时区,SpringBoot与之对应的正确方法:
- 很简单 就是在连接地址上加上时区,但是这个时区不是GMT+8
- 而是如下:
spring:
datasource:
druid:
url: jdbc:mysql://server.address:3306/ilss_blog?useSSL=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
-
你没看错,就是Asia/Shanghai
-
这个可以填的值可以在 /usr/share/zoneinfo 目录下,但是你不可以直接填Asia或者直接填Shanghai你需要填Asia/Shanghai 从zoneinfo的相对路径开始填
-
是不是很简单!你去试试吧。
-
感谢不知道看了哪些博客的主人。