Tomcat автоматически распаковывает WAR-файл, изменив время последнего изменения файлов

#java #tomcat #war

#java #tomcat #Война

Вопрос:

У меня возникла проблема, когда я попытался развернуть файл WAR в tomcat. Во время процесса автоматической распаковки из tomcat изменялась дата последнего изменения файлов распаковки. Дата распаковки веб-приложения. файлы стали на 12 часов быстрее, и это приводит к нескольким разным ошибкам.

Я попытался распаковать вручную через jar -xvf, дата последнего изменения файлов осталась неизменной. Я также тестировал в локальном tomcat (тот же часовой пояс с dev. env.), ничего не изменилось в дате последнего изменения.

Похоже, проблема с часовым поясом tomcat, могу ли я настроить tomcat, чтобы решить эту проблему? Большое спасибо за любую помощь.

Среда: Tomcat 6 в Linux с часовым поясом GMT-4, установленным на сервере, и tomcat — файл WAR, созданный машиной с установленным часовым поясом GMT 8

Комментарии:

1. Я также сталкиваюсь с этой проблемой. Вы выяснили, почему?

2. нет, мне нужно распаковать и перепаковать WAR на компьютере развертывания, чтобы заставить файл WAR работать.

3. Вы пробовали устанавливать часовой пояс в Tomcat? в tomcat/bin/setenv.bat -Duser.timezone=America/New_York в tomcat/webapps/ROOT/classes/system-ext.properties user.timezone=America/New_York

Ответ №1:

В моем случае приложение устанавливало часовой пояс по умолчанию из Tomcat при инициализации приложения. Разница, вызванная изменением часовых поясов, соответствовала смещению во времени изменения файла.

Я был удивлен, что любой код в приложении может запускаться до распаковки, но контейнер Tomcat дает приложению возможность запускать код инициализации перед распаковкой всех файлов.

Найдите вхождение TimeZone.setDefault() и попробуйте удалить вызов или переместить вызов позже в последовательности инициализации.

Полезные подсказки:

Этот JSP сообщил мне, что приложение всегда работало с определенным часовым поясом независимо от настроек среды:

 <html> 
<body> 
<h2>Current Timezone</h2> 
<%    java.util.Date date = new java.util.Date();       
      java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("zzz"); %> 
<%=sdf.format(date)%> 
</body> 
</html>
  

В файлах журнала я мог видеть момент изменения часового пояса (четырехчасовой скачок). Это происходит во время загрузки приложения.

Примечание: После установки часовой пояс будет оставаться установленным до перезапуска Tomcat.

 Sep 18, 2015 2:34:26 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8443
Sep 18, 2015 2:34:26 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 285 ms
Sep 18, 2015 2:34:26 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Sep 18, 2015 2:34:26 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.24
Sep 18, 2015 2:34:26 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive myWebapp.war
Sep 18, 2015 6:34:30 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
Sep 18, 2015 6:34:34 PM org.apache.catalina.core.ApplicationContext log
INFO: org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: loaded (conf ok)
Sep 18, 2015 6:34:34 PM org.apache.catalina.core.ApplicationContext log
INFO: struts: []: Verifying ModuleConfig for this module
Sep 18, 2015 6:34:34 PM org.apache.catalina.core.ApplicationContext log
INFO: struts: []: Verification of ModuleConfig has been completed
Sep 18, 2015 6:34:34 PM org.apache.catalina.core.ApplicationContext log
INFO: struts: []: Verifying ModuleConfig for this module