SpringBoot项目时区问题

最近,博主在工作中遇到奇怪问题, 前端在某些查询功能时,会将时间条件检验并将北京时间转换成标准时间传入,但是在新增等功能,传入的时间是北京时间,故记录.

1 局部配置

1 入参对象属性使用JsonFormat注解

// 指定为北京时间,将时间加八个小时
@JsonFormat(pattern = "yyyy-MM-dd",timezone="GMT+8")
private Date startTime;

2 全局配置

2 配置一个bean实现整体修改

@Configuration
public class config{
    
@Bean
    public Jackson2ObjectMapperBuilderCustomizer jacksonObjectMapperCustomization() {
        return jacksonObjectMapperBuilder ->
                jacksonObjectMapperBuilder.timeZone(TimeZone.getTimeZone("GMT+8"));
    }

}

3 通过配置文件设置

#spring boot2.0.0 架构问题 时间处理 (映射,时区问题)
  jackson:
  #参数意义:
     #JsonInclude.Include.ALWAYS              默认
     #JsonInclude.Include.NON_DEFAULT     属性为默认值不序列化
     #JsonInclude.Include.NON_EMPTY         属性为 空(””) 或者为 NULL 都不序列化
     #JsonInclude.Include.NON_NULL           属性为NULL   不序列化
    default-property-inclusion: ALWAYS # 默认
    date-format: yyyy-MM-dd HH:mm:ss   # 时间格式
    time-zone: GMT+8				 # 北京时间

4 在Application启动类中添加

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

5 在Application启动类方法中添加

@SpringBootApplication
public class Application {

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

总结:

方法说明
方法一: JsonFormat针对每一个入参时间对象属性. 灵活使用,如批量使用,维护较难.
方法二: 添加配置bean通过配置,全局配置,方便维护.但局限性大,要求所有入参都为标准时间.且有变更,需要重启项目.
方法三: 配置文件通过配置,全局配置,方便维护.但局限性大,要求所有入参都为标准时间.
方法四: 启动类添加构造后执行方法通过配置,全局配置,方便维护.但局限性大,要求所有入参都为标准时间.且有变更,需要重启项目.
方法五: 启动类启动方法添加时区设置通过配置,全局配置,方便维护.但局限性大,要求所有入参都为标准时间.且有变更,需要重启项目.

综上, 单个参数需要设置时区,推荐使用方法一,添加注解 ; 多个参数设置时区,推荐方法三,配置文件中添加时区设置.

3 数据库时区问题

Mysql数据库有时区概念,默认系统当前时区.

# 查看Mysql时区
show variables like "%time_zone%";

1 通过命令来设置时区

 set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区
> set time_zone = '+8:00'; ##修改当前会话时区
> flush privileges; #立即生效

2 修改配置设置时区

修改MySQL的 my.cnf配置文件,修改时区.

# 打开配置文件
vim /etc/my.cnf

# 在[mysqld]区域中加上
default-time_zone = '+8:00'

# 重启mysql使新时区生效
/etc/init.d/mysqld restart

参考资料:

https://www.jianshu.com/p/085eb3c3120e

https://blog.csdn.net/jianxia801/article/details/89741073

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为部署Spring Boot项目,首先需要准备一个运行Spring Boot的容器环境。可以使用Tomcat作为容器来运行Spring Boot项目。 以下是部署Spring Boot项目的步骤: 1. 拉取Tomcat镜像和创建映射文件夹: 首先拉取指定版本的Tomcat镜像,例如:podman pull tomcat:9.0.44。然后创建用于映射的文件夹,包括webapps和logs目录。 2. 在webapps目录下创建config文件夹: 进入到webapps目录,创建一个名为config的文件夹。这个文件夹用来存放Spring Boot项目的配置文件。 3. 运行容器: 使用以下命令运行Tomcat容器: podman run --privileged=true -v /home/tomcat/webapps/:/usr/local/tomcat/webapps/ -v /home/tomcat/logs/:/usr/local/tomcat/logs -v /home/tomcat/webapps/config:/usr/local/tomcat/conf_app/ -e TZ=Asia/Shanghai -p 8080:8080 --name tomcat9 -d tomcat:9.0.44。 这个命令会创建一个名为tomcat9的容器,并将映射文件夹挂载到容器内。同时,设置了时区和端口映射。 接下来是部署MySQL数据库的步骤: 1. 拉取MySQL镜像和创建文件夹: 拉取指定版本的MySQL镜像,例如:podman pull mysql:8.0.20。然后创建用于映射的文件夹,包括conf和data目录。 2. 在conf目录下创建my.cnf配置文件: 进入到conf目录,使用vim命令创建一个名为my.cnf的配置文件,并将文件内容复制到其中。这个配置文件用于设置MySQL的字符集和其他参数。 3. 运行容器: 使用以下命令运行MySQL容器: podman run -d -p 3306:3306 --privileged=true -v /media/docker/mysql8.0/conf/my.cnf:/etc/mysql/my.cnf -v /media/docker/mysql8.0/data:/var/lib/mysql -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD=root --name mysql8.0 mysql:8.0.20。 这个命令会创建一个名为mysql8.0的容器,并将映射文件夹挂载到容器内。同时,设置了时区和MySQL的root用户密码。 通过以上步骤,你可以成功部署Spring Boot项目,并且在Tomcat容器中运行项目,同时使用MySQL容器作为数据库。请确保在云服务器上打开了对应的端口,以便通过Navicat等工具连接到MySQL数据库。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [docker/podman springboot mysql tomcat部署安装](https://blog.csdn.net/xc979906570/article/details/122069262)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值