SpringBoot解决时区问题

SpringBoot解决时区问题

前言

蘑菇博客一直存在时区不正确的问题,让我苦不堪言,比如刚刚发表的评论会显示八小时前

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是我们查看数据库的和服务器的时间能够发现,时间显示是正常的

刚刚发表的评论的时间:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以及服务器的时间

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决方法

最近通过热心的小伙伴提出,打算彻底解决这个时区的问题,进过查阅相关博客,总结出下面有效的配置

1、我们设置mysql连接,在连接语句后面加上

&serverTimezone=Asia/Shanghai

2、然后修改jackson配置

#spring
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: Asia/Shanghai

3、修改启动类

在启动类中,添加这个方法

    /**
     * 设置时区
     */
    @PostConstruct
    void setDefaultTimezone() {
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
    }

然后在启动类的main方法中,设置时区

    public static void main(String[] args) {
        TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
        SpringApplication.run(AdminApplication.class, args);
    }

### Spring Boot内置Tomcat时区配置 对于Spring Boot应用中的内置Tomcat服务器,如果遇到时区设置不正确的问题,可以通过多种方式调整以确保应用程序按照预期的时区运行。 一种方法是在`application.properties`或`application.yml`文件中指定Java系统的属性来覆盖默认的时区设置。例如,在`.properties`文件里可以这样写: ```properties server.tomcat.additional-tomcat-connectors[0].attributes['java.util.TimeZone'] = 'Asia/Shanghai' ``` 或者在YAML格式下的配置如下所示[^2]: ```yaml server: tomcat: additional-tomcat-connectors: - attributes: java.util.TimeZone: Asia/Shanghai ``` 另一种更为推荐的方法是通过JVM启动参数来进行全局性的时区设定,这适用于整个Java程序而不仅仅是Tomcat容器本身。可以在命令行启动项目的时候加上 `-Duser.timezone=UTC+8` 参数,或者是修改IDE(如IntelliJ IDEA 或 Eclipse)里的Run Configuration选项加入此参数。 此外,也可以利用自定义的嵌入式Servlet容器工厂Bean来自定义Tomcat实例并设置其初始化参数。下面是一个简单的例子展示如何实现这一点: ```java import org.apache.catalina.connector.Connector; import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class TomcatConfig { @Bean public TomcatConnectorCustomizer connectorCustomizer() { return new TomcatConnectorCustomizer(connector -> { ((Connector)connector).setAttribute("java.util.TimeZone", "Asia/Shanghai"); }); } ``` 以上几种方案都可以有效地解决Spring Boot内建Tomcat服务端时间与时区不符的情况。选择最适合具体应用场景的方式即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值