在 Tomcat 中为单个 Web 应用程序设置时区的最佳方法是什么?我已经看到了更改 Tomcat 的命令行参数或环境变量的选项,但是有没有一种方法可以将其设置为独立于 WAR 文件而不依赖于任何 Tomcat 配置?
编辑:再次强调,我正在寻找一个可以包含在 WAR 文件中的解决方案,而不依赖于 Tomcat 配置。换句话说,是否可以将一个 Web 应用程序配置为与同一 Tomcat 实例中运行的其他应用程序具有不同的时区?
我发现的唯一方法是设置过滤器并更改过滤器中的时区,
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);
}
The setDefault()
更改线程的区域。因此,过滤器内线程中运行的所有内容都将具有不同的默认时区。我们必须将其改回来,因为该线程被其他应用程序共享。您还需要为您做同样的事情init()
, destroy()
方法以及您可能在应用程序中启动的任何其他线程。
我必须这样做,因为第三方库假定默认时区,而我们没有源代码。这是一团糟,因为这改变了日志时区,但我们不想登录不同的时间。处理此问题的正确方法是在向最终用户公开的任何时间值中使用特定时区。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)