如何强制 Spring 引导 JVM 进入 UTC 时区



我看到 Force Java 时区为 GMT/UTC

我试过了

  • mvn spring-boot:run -Dexec.args="-Duser.timezone=GMT"
  • mvn spring-boot:run -Dexec.args="-Duser.timezone=UTC"
  • user.timezone=UTC config/application.properties
  • user.timezone=GMT
  • 在绒球中.xml:

        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <properties>
                  <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
                </properties>
            </configuration>
        </plugin>
    
  • mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Duser.timezone=UTC"

但它打印出来

System.out.println(TimeZone.getDefault());
sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings =3600000,useDaylight=

true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings =3600000,useDaylight=true,startYear

=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]

Spring Boot 1.5.19, Java 8

我认为您可以在应用程序级别设置应用程序的时区。我认为此链接将对您有所帮助。https://www.onlinetutorialspoint.com/spring-boot/how-to-set-spring-boot-settimezone.html

所以你需要做的是在"@SpringBootApplication"注解所在的主类中添加"@PostConstruct"注解,并在那里添加时区设置方法。下面是一个示例。

@SpringBootApplication
public class HellotimezoneApplication {
    public static void main(String[] args) {
        SpringApplication.run(HellotimezoneApplication.class, args);
    }
    @PostConstruct
    public void init(){
      // Setting Spring Boot SetTimeZone
      TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    }
}

希望这能帮助你!

如果要将 JVM 选项从 Maven Spring 引导插件传递到分支的 Spring 引导应用程序,请使用spring-boot.run.jvmArguments属性:

<properties>
  <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
</properties>

这等效于命令行语法:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Duser.timezone=UTC"

或者在运行完全打包的 Spring 引导应用程序时:

java -Duser.timezone=UTC -jar app.jar

> 您可以使用用@Configuration注释注释的类来配置时区。您可以将其放在项目中的任何位置。我通常将所有适合此类别的类存放在一个名为 config 的包中。请确保将@PostConstruct批注添加到实际设置时区的方法中。

import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
@Configuration
public class LocaleConfig {
    @PostConstruct
    public void init() {
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
        System.out.println("Date in UTC: " + new Date().toString());
    }
}

见原文

帖子结构有时不起作用,使其预构造对我有用

@EnableSwagger2
@SpringBootApplication(scanBasePackages = { "com.app" })
public class Application {
    
    public static void main(String[] args) {
        System.out.println("Setting the timezone"+TimeZone.getTimeZone("GMT+9:00").getID());
        TimeZone.setDefault(TimeZone.getTimeZone("GMT+9:00"));
        SpringApplication.run(Application.class, args);
    }
    
}

如果您的应用程序在 Linux 下运行,则有更多选项:

设置TZ环境变量

请参阅"在POSIX系统中,用户可以通过TZ环境变量指定时区"(https://www.gnu.org/software/libc/manual/html_node/TZ-Variable.html)。

此选项在任何云环境中都特别有用。

符号链接/etc/locatime

即在我的本地系统中/etc/locatime符号链接到/usr/share/zoneinfo/Europe/Berlin

➜ ls -l /etc/localtime  
lrwxrwxrwx 1 root root 33 22. Jan 23:01 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin

您可以使用ln -s /usr/share/zoneinfo/GMT /etc/localtime轻松更改符号链接,可以在/usr/share/zoneinfo/中找到可能的值。

此选项还可以通过挂载主机卷在许多云环境中使用,请参阅 POD 中的 kubernetes 时区和命令和参数。

当我运行单元测试时,这对我来说就像一个魅力:您必须在 Junit 或 Maven 配置的 vm 参数 GMT 上添加以下命令(我不知道为什么 UTC 对我不起作用,希望这对您有所帮助^^)

    -Duser.timezone="GMT+2"

<properties> <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments> </properties> 这对我不起作用。

但是如果你使用 jvmArguments 代替,这对我有用。参考资料:https://docs.spring.io/spring-boot/docs/current/maven-plugin/reference/html/...

简单 <configuration> <jvmArguments>-Duser.timezone=UTC</jvmArguments> </configuration>

相关内容

  • 没有找到相关文章

最新更新