在运行于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的时区?
谢谢
答案 0 :(得分:1)
运行Tomcat服务器的JVM只有一个默认时区。更改默认值会立即影响该JVM中运行的所有应用程序的所有线程中的所有代码。因此,调用TimeZone.setDefault
几乎从来都不是正确的事情。
了解多年前取代了可怕的旧式日期时间类的现代 java.time 类。具体来说,请使用ZoneId
和ZoneOffset
而不是TimeZone
。对于UTC,请使用常量ZoneOffset.UTC
。
了解Servlet上下文侦听器,这些对象在Servlet上下文的“属性”存储中将对象设置为键-值对。您可以在此处存储所需的ZoneId
对象。也许Spring可以提供一些帮助。 (我不使用Spring。)
有关更多信息,请参见我对this similar Question的回答。