在Tomcat 8上运行的spring启动应用程序上,我将以下代码放入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 的时区?
谢谢
运行 Tomcat 服务器的 JVM 只有一个缺省时区。更改该默认值会立即影响在该 JVM 中运行的所有应用程序的所有线程中的所有代码。因此,打电话给TimeZone.setDefault
几乎从来都不是正确的做法。
了解现代的java.time类,这些类在几年前取代了糟糕的传统日期时间类。具体来说,使用 ZoneId
& ZoneOffset
而不是 TimeZone
。对于 UTC,请使用常量ZoneOffset.UTC
。
侦听器在 Servlet 上下文的"属性"存储区中将对象设置为键值对。您可以将所需的ZoneId
对象存储在那里。或者也许春天有一些方法可以帮助解决这个问题。(我不使用Spring。
有关更多信息,请参阅我对这个类似问题的回答。