一尘不染

如何在Tomcat中为单个Web应用程序设置时区?

tomcat

在Tomcat中为单个Web应用程序设置时区的最佳方法是什么?我已经看到了用于更改Tomcat的命令行参数或环境变量的选项,但是有没有一种方法可以将其设置为WAR文件中的自包含文件,而不依赖于任何Tomcat配置?

编辑:再次强调,我正在寻找可以包含在WAR文件中而不依赖于Tomcat配置的解决方案。换句话说,是否可以将一个Web应用程序配置为与在相同Tomcat实例中运行的其他应用程序具有不同的时区?


阅读 211

收藏
2020-06-16

共1个答案

一尘不染

我发现的唯一方法是设置过滤器并更改过滤器中的时区,

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {
    TimeZone savedZone = TimeZone.getDefault();
    TimeZone.setDefault(webappZone);
    chain.doFilter(request, response);
    TimeZone.setDefault(savedZone);
}

setDefault()改变了线程的区域。因此,在过滤器内部线程中运行的所有内容都将具有不同的默认时区。我们必须将其改回,因为该线程由其他应用程序共享。您还需要对init()destroy()方法和可能在应用程序中启动的任何其他线程执行相同的操作。

我必须这样做,因为第三方库采用默认时区,并且我们没有源代码。真是一团糟,因为这会更改日志时区,但我们不希望登录时间不同。解决此问题的正确方法是在暴露给最终用户的任何时间值中使用特定时区。

2020-06-16