时区Springboot Tomcat 8 AS

时间:2019-06-14 06:10:46

标签: spring-boot java-8 timezone tomcat8

在运行于Tomcat 8的spring boot应用程序上,我将此代码存入SpringBootServletInitializer:

public class MyApplication extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(MyApplication.class);
}

@PostConstruct
public void init() {
    // Setting Spring Boot SetTimeZone
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}

public static void main(String[] args) {
    SpringApplication.run(MyApplication.class, args);
} }

在我的tomcat应用程序服务器上,我有一些关于spring框架的文章,问题是我的tomcat内部的所有应用程序都已根据我的应用程序更改了时区,这是错误的。

如何仅为我的应用程序设置时区,而又不影响其他应用程序进入tomcat的时区?

谢谢

1 个答案:

答案 0 :(得分:1)

运行Tomcat服务器的JVM只有一个默认时区。更改默认值会立即影响该JVM中运行的所有应用程序的所有线程中的所有代码。因此,调用TimeZone.setDefault几乎从来都不是正确的事情。

了解多年前取代了可怕的旧式日期时间类的现代 java.time 类。具体来说,请使用ZoneIdZoneOffset而不是TimeZone。对于UTC,请使用常量ZoneOffset.UTC

了解Servlet上下文侦听器,这些对象在Servlet上下文的“属性”存储中将对象设置为键-值对。您可以在此处存储所需的ZoneId对象。也许Spring可以提供一些帮助。 (我不使用Spring。)

有关更多信息,请参见我对this similar Question的回答。