Java 如何强制Spring引导JVM进入UTC时区?
我看到 我试过了Java 如何强制Spring引导JVM进入UTC时区?,java,spring,spring-boot,timezone,Java,Spring,Spring Boot,Timezone,我看到 我试过了 mvn spring引导:运行-Dexec.args=“-Duser.timezone=GMT” mvn spring引导:运行-Dexec.args=“-Duser.timezone=UTC” config/application.properties中的user.timezone=UTC user.timezone=GMT 在pom.xml中: <plugin> <groupId>org.springframework.bo
- mvn spring引导:运行-Dexec.args=“-Duser.timezone=GMT”
- mvn spring引导:运行-Dexec.args=“-Duser.timezone=UTC”
config/application.properties中的
user.timezone=UTC
user.timezone=GMT
- 在pom.xml中:
sun.util.calendar.ZoneInfo[id=“America/New_York”,偏移量=-18000000,DSTSaviews=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSaves=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDayOfWeek=1,endTime=7200000,endTimeMode=0]] 如果要将JVM选项从Maven Spring Boot插件传递到分叉的Spring Boot应用程序,请使用Spring Boot 1.5.19、Java 8:<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>
<properties> <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments> </properties>
或者在运行完全打包的Spring引导应用程序时:java -Duser.timezone=UTC -jar app.jar
<properties> <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments> </properties>
java -Duser.timezone=UTC -jar app.jar
您可以使用带有
注释的类来配置时区。您可以将其放在项目中的任何位置。我通常将属于此类别的所有类放在名为@Configuration
的包中。请确保将config
注释添加到实际设置时区的方法中e时区@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()); } }
请参阅我认为您可以在应用程序级别设置应用程序的时区。我认为此链接将对您有所帮助。 因此,您需要做的是将“@PostConstruct”注释添加到“@SpringBootApplication”注释所在的主类中,并在其中添加时区设置方法。下面是一个示例@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")); } }
希望这能对您有所帮助!如果您的应用程序在linux下运行,请提供更多选项: 设置
环境变量 请参阅“在POSIX系统中,用户可以通过TZ环境变量指定时区”() 此选项在任何云环境中都特别有用 符号链接TZ
即,在我的本地系统中,指向/etc/locatime
的符号链接为/usr/share/zoneinfo/Europe/Berlin
:/etc/locatime
您可以使用➜ 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
中找到可能的值 此选项也可以通过装载主机卷在许多云环境中使用,请参阅。-code>-Duser.timezone=UTC 那对我不起作用 但是如果你使用JVM参数,这对我来说很有效。 参考资料:/usr/share/zoneinfo/
只需
第一个选项-Duser.timezone=UTC
@Chloe对我来说可以使用
或-Dspring boot.run.jvmArguments=“-Duser.timezone=UTC”
或-Dspring-boot.run.jvmArguments=“-Duser.timezone=UTC”
与Spring Boot 2.1.2.RELEASE和Java 11.Project一起生成。我明白了。必须是v1中的一个bug,并在v2中修复。-Dspring-boot.run.jvmArguments="-Duser.timezone=America/New_York
确实有效。-Duser.timezone=UTC不起作用,但如果使用JVM参数,则对我有效。参考:as si示例as:-Duser.timezone=UTC此操作适用于Spring Boot v1:Java-Duser.timezone=UTC-jar target\App SNAPSHOT.war
这不适用于在调用mvn Spring Boot:run-Drun.jvmArguments=“-Duser.timezone=UTC”
方法之前运行的代码,例如JVM初始化或Spring bean构造。如果在init()
方法,但傻瓜式的方法是使用main()
选项。-D