Home  >  Article  >  Java  >  How to solve the time zone difference problem when querying springboot database

How to solve the time zone difference problem when querying springboot database

PHPz
PHPzforward
2023-06-04 17:37:031518browse

    The time zone difference that occurs when querying the springboot database

    In recent projects, multiple data sources have been used to migrate data from the MySQL library to the mongo library and found that There will be an 8-hour difference between the time of the retrieved data and the original data.

    Finally, the problem was solved after I tried it. Let’s record it:

    I saw two more practical methods on the Internet, because Because of the springboot used, what I use here is to modify it in the configuration file application.yml. Other methods can be found online.

    1. We add an item in the configuration of connecting to the database

    &serverTimezone=GMT%2b8
     primary:
          jdbc-url: jdbc:mysql://******:3306/***?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
          username: ****
          password: *****
        secondary:
          jdbc-url: jdbc:mysql://*******:3306/***?useUnicode=true&characterEncoding=UTF8&zeroDateTimeBehavior=convertToNull&serverTimezone=GMT%2b8
          username: *****
          password: ********

    The original format should be like this:

    &serverTimezone=GMT+8 这里使用%2b替换 + 号

    2. Add the jackson configuration directly to the boot configuration file

    #在application.yml中增加配置
    spring:
        jackson:
            time-zone: GMT+8

    This way you can successfully modify the time, and there are other For the method, you can check it out

    springboot new Date() time zone difference is 8 hours

    1 In the k8s environment, compare the time in the code. The difference is 8 hours under new Date()

    Check the host time zone is cst time zone

    Use java code to write the controller time zone and find that it is GMT

    code As follows:

    Calendar calendar = Calendar.getInstance();      
            System.out.println("目前时间:" + calendar.getTime());
            System.out.println("Calendar时区::" + calendar.getTimeZone().getID());
            System.out.println("user.timezone:" + System.getProperty("user.timezone"));
            System.out.println("user.country:" + System.getProperty("user.country"));
            System.out.println("默认时区:" + TimeZone.getDefault().getID());

    The output time zone is GMT, which is different from the host machine. If you can’t handle the operation and maintenance, you have to do it yourself

    It seems that the time zone is still the problem-

    1. Database link db adds parameter serverTimezone=Asia/Shanghai

    2. Springboot startup script adds -Duser.timezone=GMT 08

    3. Jackson global configuration

    spring.jackson.date-format: yyyy-MM-dd HH:mm:ss
    spring.jackson.time-zone: GMT+8

    4, jackson annotation

    @JsonFormat(timezone = “GMT+8”, pattern = “yyyy-MM-dd HH:mm:ss”)

    The above is the detailed content of How to solve the time zone difference problem when querying springboot database. For more information, please follow other related articles on the PHP Chinese website!

    Statement:
    This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete