簡體   English   中英

Tomcat Spring Web-MVC應用程序重新初始化(兩次啟動)

[英]Tomcat Spring Web-MVC Application Re-Initializes (Double Launch)

背景-我正在將一些舊代碼重構到Spring Web-MVC框架中。

我正在使用Spring 5.0.5.RELEASE和tomcat 8.5.31。

我正在通過Eclipse Oxygen.3a Release(4.7.3a)和Fedora 28啟動該應用程序。

問題-啟動tomcat時,應用程序調度程序間歇性地(大約75%的時間)重新啟動。 看來,在應用程序加載后,我收到一條完成的消息,然后重新加載。

完成第二次應用程序加載后,一切似乎都能正常工作。

在生產中,由於我在啟動時創建了一些計時器任務,因此這些任務往往會重復。 因此,我有重復的計時器任務線程正在運行,這是一個問題。

—————————————首次啟動示例

2018年7月5日20:45:29.207信息[線程17] org.apache.coyote.AbstractProtocol.stop正在停止ProtocolHandler [“ http-nio-8080”]

2018年7月5日20:45:29.209信息[線程17] org.apache.coyote.AbstractProtocol.stop正在停止ProtocolHandler [“ ajp-nio-8009”]

2018年7月5日20:45:29.211信息[線程17] org.apache.coyote.AbstractProtocol.destroy銷毀ProtocolHandler [“ http-nio-8080”]

2018年7月5日20:45:29.212信息[線程17] org.apache.coyote.AbstractProtocol.destroy銷毀ProtocolHandler [“ ajp-nio-8009”]

2018年7月5日20:45:29.931信息[主] org.apache.catalina.startup.VersionLoggerListener.log服務器版本:Apache Tomcat / 8.5.31

2018年7月5日20:45:29.933信息[main] org.apache.catalina.startup.VersionLoggerListener.log服務器內置:2018年4月27日20:24:25 UTC

2018年7月5日20:45:29.934信息[主] org.apache.catalina.startup.VersionLoggerListener.log服務器編號:8.5.31.0

2018年7月5日20:45:29.934信息[main] org.apache.catalina.startup.VersionLoggerListener.log操作系統名稱:Linux

2018年7月5日20:45:29.934信息[主] org.apache.catalina.startup.VersionLoggerListener.log操作系統版本:4.16.15-300.fc28.x86_64

2018年7月5日20:45:29.934信息[main] org.apache.catalina.startup.VersionLoggerListener.log體系結構:amd64

2018年7月5日20:45:29.934信息[main] org.apache.catalina.startup.VersionLoggerListener.log Java主頁:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-4.b10 .fc28.x86_64 / jre

2018年7月5日20:45:29.935信息[main] org.apache.catalina.startup.VersionLoggerListener.log JVM版本:1.8.0_171-b10

2018年7月5日20:45:29.935信息[main] org.apache.catalina.startup.VersionLoggerListener.log JVM供應商:Oracle Corporation

2018年7月5日20:45:29.936信息[主] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:/opt/apache-tomcat-8.5.31

2018年7月5日20:45:29.936信息[main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:/opt/apache-tomcat-8.5.31

2018年7月5日20:45:29.936信息[main] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Djava.util.logging.config.file = / opt / tomcat / conf / logging.properties

2018年7月5日20:45:29.937信息[main] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Djava.util.logging.manager = org.apache.juli.ClassLoaderLogManager

2018年7月5日20:45:29.937信息[main] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Djava.awt.headless = true

2018年7月5日20:45:29.938信息[main] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Djava.security.egd = file:/ dev /./ urandom

2018年7月5日20:45:29.938 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Djdk.tls.ephemeralDHKeySize = 2048

2018年7月5日20:45:29.939信息[main] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Djava.protocol.handler.pkgs = org.apache.catalina.webresources

2018年7月5日20:45:29.939信息[主] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Dorg.apache.catalina.security.SecurityListener.UMASK = 0027

2018年7月5日20:45:29.939信息[主] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Xms512M

2018年7月5日20:45:29.939信息[主] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Xmx2048M

2018年7月5日20:45:29.940信息[主] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-XX:+ UseParallelGC

2018年7月5日20:45:29.940信息[主] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Dignore.endorsed.dirs =

2018年7月5日20:45:29.941信息[主] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Dcatalina.base = / opt / tomcat

2018年7月5日20:45:29.941信息[主] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Dcatalina.home = / opt / tomcat

2018年7月5日20:45:29.941信息[主] org.apache.catalina.startup.VersionLoggerListener.log命令行參數:-Djava.io.tmpdir = / opt / tomcat / temp

2018年7月5日20:45:29.941信息[主要] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent在java.library.path上找不到基於APR的Apache Tomcat本機庫,該庫允許在生產環境中實現最佳性能: [/ usr / java / packages / lib / amd64:/ usr / lib64:/ lib64:/ lib:/ usr / lib]

2018年7月5日20:45:30.042信息[主] org.apache.coyote.AbstractProtocol.init初始化ProtocolHandler [“ http-nio-8080”]

2018年7月5日20:45:30.053信息[主] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector使用共享選擇器進行servlet讀寫

2018年7月5日20:45:30.061信息[main] org.apache.coyote.AbstractProtocol.init初始化ProtocolHandler [“ ajp-nio-8009”]

2018年7月5日20:45:30.063信息[主] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector使用共享選擇器進行servlet讀寫

2018年7月5日20:45:30.064信息[主] org.apache.catalina.startup.Catalina.load初始化在592毫秒內處理

2018年7月5日20:45:30.088信息[main] org.apache.catalina.core.StandardService.startInternal啟動服務[Catalina]

2018年7月5日20:45:30.088信息[main] org.apache.catalina.core.StandardEngine.startInternal啟動Servlet引擎:Apache Tomcat / 8.5.31

2018年7月5日20:45:32.224信息[localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars至少掃描了一個JAR來查找TLD,但其中沒有TLD。 為該記錄器啟用調試日志記錄,以獲取已掃描的JAR的完整列表,但未在其中找到TLD。 在掃描過程中跳過不需要的JAR可以縮短啟動時間和JSP編譯時間。

2018-07-05 20:45:32信息oswsDispatcherServlet:494-FrameworkServlet'dispatcher':初始化開始

2018-07-05 20:45:32 INFO oswcsXmlWebApplicationContext:590-刷新名稱空間“ dispatcher-servlet”的WebApplicationContext:啟動日期[星期四2018年7月5日20:45:32]; 上下文層次結構的根

2018-07-05 20:45:32信息osbfxXmlBeanDefinitionReader:316-從ServletContext資源中加載XML bean定義[/WEB-INF/dispatcher-servlet.xml]

(這里還有更多,但只是想向TLD和調度程序初始化顯示...)

———————第二次啟動示例

(第一次啟動以spring URL映射消息結束...)

2018-07-05 20:28:34信息oswsmmaRequestMappingHandlerMapping:547-將“ {[/ manualArtifact],methods = [GET]}”映射到公共java.lang.String com.deorc.controller.ViewManualController.manualArtifact(javax.servlet .http.HttpServletRequest,org.springframework.ui.Model)

2018-07-05 20:28:34信息oswsmmaRequestMappingHandlerMapping:547-將“ {[/ manualBonuses],methods = [GET]}”映射到公共java.lang.String com.deorc.controller.ViewManualController.manualBonuses(javax.servlet .http.HttpServletRequest,org.springframework.ui.Model)

2018-07-05 20:28:35信息oswsmmaRequestMappingHandlerAdapter:574-尋找@ControllerAdvice:名稱空間“ dispatcher-servlet”的WebApplicationContext:啟動日期[星期四2018年7月5日20:28:27 UTC]; 上下文層次結構的根

2018-07-05 20:28:35信息oswsmmaRequestMappingHandlerAdapter:574-尋找@ControllerAdvice:名稱空間“ dispatcher-servlet”的WebApplicationContext:啟動日期[星期四2018年7月5日20:28:27 UTC]; 上下文層次結構的根

2018-07-05 20:28:35信息oswshSimpleUrlHandlerMapping:373-將URL路徑[/ resources / **]映射到處理程序'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'

2018-07-05 20:28:35信息oswsDispatcherServlet:509-FrameworkServlet'dispatcher':初始化在7348毫秒內完成

2018年7月5日20:28:37.167信息[localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars至少掃描了一個JAR來查找TLD,但其中沒有TLD。 為該記錄器啟用調試日志記錄,以獲取已掃描的JAR的完整列表,但未在其中找到TLD。 在掃描過程中跳過不需要的JAR可以縮短啟動時間和JSP編譯時間。

2018-07-05 20:28:37信息oswsDispatcherServlet:494-FrameworkServlet'dispatcher':初始化開始

2018-07-05 20:28:37 INFO oswcsXmlWebApplicationContext:590-刷新名稱空間“ dispatcher-servlet”的WebApplicationContext:啟動日期[Thu Jul 05 20:28:37 UTC 2018]; 上下文層次結構的根

2018-07-05 20:28:37信息osbfxXmlBeanDefinitionReader:316-從ServletContext資源加載XML Bean定義[/WEB-INF/dispatcher-servlet.xml]

——————————————————

注意:我不知道為什么會收到兩個控制器建議信息日志,這些日志給了我“ dispatcher-servlet”的啟動日期。 而且我不確定這是否是問題。

初始化和啟動之間唯一記錄的項目是來自Tomcat的有關TLD掃描程序的信息消息。 這似乎表明第二次發射已經開始。 在第一次初始化之前,存在相同的TLD消息。 因此,我認為這不是問題。 我嘗試關閉無成功的TLD掃描。

任何建議或建議將不勝感激。

我終於能夠解決問題。 不過,我不完全了解為什么會這樣。 問題是我如何在web.xml中定義我的servlet。

以前,我有:

  <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
    </init-param>
    <load-on-startup>10</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

現在已更改為:

   <servlet>
    <servlet-name>dark-expanse-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>dark-expanse-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

1) <load-on-startup>標記肯定引起了重新初始化。

2)為contextConfigLocation提供特定的參數似乎也引起了相同的問題。

3)最后,我不確定這一點,我將servlet名稱從默認的“ dispatcher”更改為應用程序特定名稱以及dispatcher-servlet.xml文件。 彈簧也可能使用調度程序。

自從去年夏天解決此問題以來,我可能應該早點發布。 問題不是Spring,而是Tomcat配置。 問題是Tomcat在server.xml中存在一個與上下文標記相關的已知錯誤。 有關上下文標簽的使用,請查看tomcat文檔以獲取更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM