【发布时间】:2018-12-15 11:53:00
【问题描述】:
背景 - 我正在将一些遗留代码重构到 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 信息 [Thread-17] org.apache.coyote.AbstractProtocol.stop 停止 ProtocolHandler ["http-nio-8080"]
05-Jul-2018 20:45:29.209 INFO [Thread-17] org.apache.coyote.AbstractProtocol.stop 停止 ProtocolHandler ["ajp-nio-8009"]
2018 年 7 月 5 日 20:45:29.211 信息 [Thread-17] org.apache.coyote.AbstractProtocol.destroy 销毁 ProtocolHandler ["http-nio-8080"]
05-Jul-2018 20:45:29.212 INFO [Thread-17] org.apache.coyote.AbstractProtocol.destroy 销毁 ProtocolHandler ["ajp-nio-8009"]
05-Jul-2018 20:45:29.931 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器版本:Apache Tomcat/8.5.31
2018 年 7 月 5 日 20:45:29.933 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器建成时间:2018 年 4 月 27 日 20:24:25 UTC
05-Jul-2018 20:45:29.934 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 服务器号:8.5.31.0
05-Jul-2018 20:45:29.934 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统名称:Linux
05-Jul-2018 20:45:29.934 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 操作系统版本:4.16.15-300.fc28.x86_64
05-Jul-2018 20:45:29.934 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 架构:amd64
05-Jul-2018 20:45:29.934 INFO [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
05-Jul-2018 20:45:29.935 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 版本:1.8.0_171-b10
05-Jul-2018 20:45:29.935 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 供应商:Oracle Corporation
2018 年 7 月 5 日 20:45:29.936 信息 [main] 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
05-Jul-2018 20:45:29.936 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.util.logging.config.file=/opt/tomcat/conf/ logging.properties
05-Jul-2018 20:45:29.937 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
05-Jul-2018 20:45:29.937 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.awt.headless=true
05-Jul-2018 20:45:29.938 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.security.egd=file:/dev/./urandom
05-Jul-2018 20:45:29.938 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djdk.tls.ephemeralDHKeySize=2048
05-Jul-2018 20:45:29.939 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
05-Jul-2018 20:45:29.939 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dorg.apache.catalina.security.SecurityListener.UMASK=0027
05-Jul-2018 20:45:29.939 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Xms512M
05-Jul-2018 20:45:29.939 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Xmx2048M
05-Jul-2018 20:45:29.940 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-XX:+UseParallelGC
05-Jul-2018 20:45:29.940 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dignore.endorsed.dirs=
05-Jul-2018 20:45:29.941 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dcatalina.base=/opt/tomcat
05-Jul-2018 20:45:29.941 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Dcatalina.home=/opt/tomcat
05-Jul-2018 20:45:29.941 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数:-Djava.io.tmpdir=/opt/tomcat/temp
2018 年 7 月 5 日 20:45:29.941 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 在 java.library 上找不到基于 APR 的 Apache Tomcat Native 库,它允许在生产环境中获得最佳性能.path: [/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]
05-Jul-2018 20:45:30.042 INFO [main] org.apache.coyote.AbstractProtocol.init 初始化 ProtocolHandler ["http-nio-8080"]
05-Jul-2018 20:45:30.053 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector 使用共享选择器进行 servlet 写入/读取
05-Jul-2018 20:45:30.061 INFO [main] org.apache.coyote.AbstractProtocol.init 初始化 ProtocolHandler ["ajp-nio-8009"]
05-Jul-2018 20:45:30.063 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector 使用共享选择器进行 servlet 写入/读取
05-Jul-2018 20:45:30.064 INFO [main] org.apache.catalina.startup.Catalina.load 初始化在 592 毫秒内处理
05-Jul-2018 20:45:30.088 INFO [main] org.apache.catalina.core.StandardService.startInternal 启动服务 [Catalina]
05-Jul-2018 20:45:30.088 INFO [main] org.apache.catalina.core.StandardEngine.startInternal 启动 Servlet 引擎:Apache Tomcat/8.5.31
2018 年 7 月 5 日 20:45:32.224 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少扫描了一个 JAR 以查找 TLD,但未包含 TLD。启用此记录器的调试日志记录以获取已扫描但未在其中找到 TLD 的 JAR 的完整列表。在扫描期间跳过不需要的 JAR 可以缩短启动时间和 JSP 编译时间。
2018-07-05 20:45:32 INFO o.s.w.s.DispatcherServlet:494 - FrameworkServlet 'dispatcher':初始化开始
2018-07-05 20:45:32 INFO o.s.w.c.s.XmlWebApplicationContext:590 - 刷新命名空间“dispatcher-servlet”的 WebApplicationContext:启动日期 [2018 年 7 月 5 日星期四 20:45:32 UTC];上下文层次结构的根
2018-07-05 20:45:32 INFO o.s.b.f.x.XmlBeanDefinitionReader:316 - 从 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml] 加载 XML bean 定义
(这里还有更多内容,只是想展示给 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 INFO o.s.w.s.h.SimpleUrlHandlerMapping:373 - 将 URL 路径 [/resources/**] 映射到处理程序 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
2018-07-05 20:28:35 INFO o.s.w.s.DispatcherServlet:509 - FrameworkServlet 'dispatcher':初始化在 7348 毫秒内完成
2018 年 7 月 5 日 20:28:37.167 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少扫描了一个 JAR 以查找 TLD,但未包含 TLD。启用此记录器的调试日志记录以获取已扫描但未在其中找到 TLD 的 JAR 的完整列表。在扫描期间跳过不需要的 JAR 可以缩短启动时间和 JSP 编译时间。
2018-07-05 20:28:37 INFO o.s.w.s.DispatcherServlet:494 - FrameworkServlet 'dispatcher':初始化开始
2018-07-05 20:28:37 INFO o.s.w.c.s.XmlWebApplicationContext:590 - 刷新命名空间“dispatcher-servlet”的 WebApplicationContext:启动日期 [2018 年 7 月 5 日星期四 20:28:37 UTC];上下文层次结构的根
2018-07-05 20:28:37 INFO o.s.b.f.x.XmlBeanDefinitionReader:316 - 从 ServletContext 资源 [/WEB-INF/dispatcher-servlet.xml] 加载 XML bean 定义
——————————————————
注意:我不知道为什么我会收到两个控制器建议信息日志,其中提供了“dispatcher-servlet”的启动日期。而且我不确定这是否是问题所在。
在初始化完成和启动之间唯一记录的项目是来自 Tomcat 的关于 TLD 扫描程序的信息消息。这似乎表明第二次发射的开始。在第一次初始化之前存在相同的 TLD 消息。因此,我认为这不是问题。我尝试关闭 TLD 扫描但未成功。
任何建议或建议将不胜感激。
【问题讨论】:
标签: spring spring-mvc tomcat8 dispatcher