【jhipster】springboot时区的设置-将UTC时区设置成中国时区
【jhipster】springboot时区的设置-将UTC时区设置成中国时区
- 配置写入数据库的时区
- 1.1 application.yml
- 1.2 application-dev.yml
- 配置API数据的格式和时区
- 2.1 方法1:单个设置
- 2.2 方法2: 全局配置
- 2.2.1 application.yml
- 2.2.2 Jackson2ObjectMapperBuilderCustomizer
- 配置连接数据库使用的编码utf8mb4
在使用springboot/jhipster开发时,默认都是使用世界时间,时区UTC。
所以此时,你会发现你数据库里显示的时间比实际时间晚了8个小时,另外也会发现api接口返回的数据中,时间也是UTC的时区时间。
此时我们需要做2步配置。
- 第一要配置写入数据库时,使用中国的时区(Asia/Shanghai)
- 第二要配置API返回数据时显示的时间格式和中国的时区
1. 配置写入数据库的时区
1.1 application.yml
设置hibernate.jdbc.time_zone: Asia/Shanghai
spring:
jpa:
open-in-view: false
properties:
hibernate.jdbc.time_zone: Asia/Shanghai
1.2 application-dev.yml
设置datasource
的url
为:useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
Asia/Shanghai
就是时区,来自ZoneId
,可以查看你系统的时区ZoneId.systemDefault().toString()
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://localhost:3306/jmall?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai
2. 配置API数据的格式和时区
API接口返回数据时使用的是UTC时区时间,那如何设置返回的指定时区或中国时区的格式?
2.1 方法1:单个设置
在DTO或者直接返回的entity实体,配置返回的格式和时区@JsonFormat(pattern = "yyyy-MM-dd HH
ss", timezone = "Asia/Shanghai")
public class UserDTO {
// ...
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Instant lastModifiedDate;
2.2 方法2: 全局配置
2.2.1 application.yml
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: Asia/Shanghai
2.2.2 Jackson2ObjectMapperBuilderCustomizer
此时,如果发现不生效。请增加配置
找到JacksonConfiguration.java
,增加下面的bean注册Jackson2ObjectMapperBuilderCustomizer
@Bean
public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
return jacksonObjectMapperBuilder ->
jacksonObjectMapperBuilder.timeZone(TimeZone.getDefault());
}
3. 配置连接数据库使用的编码utf8mb4
在JPA建表时可以设置默认的初始编码格式utf8mb4。
在connection-init-sql:
配置SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource
hikari:
poolName: Hikari
auto-commit: false
data-source-properties:
cachePrepStmts: true
prepStmtCacheSize: 250
prepStmtCacheSqlLimit: 2048
useServerPrepStmts: true
connection-init-sql: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci
还没有评论,来说两句吧...