当前位置: 首页 > 知识库问答 >
问题:

Tomcat Spring Web-MVC应用程序重新初始化(双重启动)

上官鸿朗
2023-03-14

背景-我正在将一些遗留代码重构到spring web-mvc框架中。

我使用的是Spring5.0.5.Release和tomcat 8.5.31。

我将通过eclipse Oxygen.3a发行版(4.7.3a)和Fedora28启动该应用程序。

问题-当启动tomcat时,应用程序调度程序间歇性地(大约75%的时间)重新启动。似乎在应用程序加载之后,我得到一个完成的消息,然后重新加载。

在完成第二次应用程序加载后,似乎一切工作正常。

在生产过程中,由于我有一些计时器任务是在启动时创建的,这些任务往往会重复。因此,我有重复的计时器任务线程在运行,这是一个问题。

-----------首次启动示例

05-jul-2018 20:45:29.207信息[Thread-17]org.apache.coyote.AbstractProtocol.Stop停止ProtocolHandler[“http-nio-8080”]

05-jul-2018 20:45:29.209信息[Thread-17]org.apache.coyote.AbstractProtocol.Stop停止ProtocolHandler[“AJP-NIO-8009”]

05-jul-2018 20:45:29.211信息[Thread-17]org.apache.coyote.AbstractProtocol.Destroy正在销毁ProtocolHandler[“http-nio-8080”]

05-jul-2018 20:45:29.212信息[Thread-17]org.apache.coyote.AbstractProtocol.Destroy销毁协议处理程序[“AJP-NIO-8009”]

05-jul-2018 20:45:29.931信息[main]org.Apache.catalina.startup.versionLoggerListener.log服务器版本:Apache Tomcat/8.5.31

05-jul-2018 20:45:29.933信息[main]org.apache.catalina.startup.versionLoggerListener.log服务器构建时间:Apr 27 2018 20:24:25 UTC

05-jul-2018 20:45:29.934信息[main]org.apache.catalina.startup.versionLoggerListener.log服务器号:8.5.31.0

05-jul-2018 20:45:29.934信息[main]org.apache.catalina.startup.versionLoggerListener.log操作系统名称:Linux

05-jul-2018 20:45:29.934信息[main]org.apache.catalina.startup.versionLoggerListener.log OS版本:4.16.15-300.fc28.x86_64

05-jul-2018 20:45:29.934信息[main]org.apache.catalina.startup.VersionLoggerListener.log体系结构:amd64

05-jul-2018 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

05-jul-2018 20:45:29.935信息[main]org.apache.catalina.startup.VersionLoggerListener.log JVM版本:1.8.0_171-B10

05-jul-2018 20:45:29.935信息[main]org.apache.catalina.startup.versionLoggerListener.log JVM供应商:Oracle Corporation

05-jul-2018 20:45:29.936信息[main]org.apache.catalina.startup.versionLoggerListener.log catalina_base:/opt/apache-tomcat-8.5.31

05-jul-2018 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

05-jul-2018 20:45:29.941 INFO[main]org.Apache.catalina.core.aprlifecyclelistener.lifecycleevent在java.library.path上找不到基于APR的Apache Tomcat本机库,该库允许在生产环境中实现最佳性能:[/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib64:/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 ms内完成

05-jul-2018 20:45:30.088 INFO[main]org.apache.Catalina.core.StandardService.Start内部启动服务[Catalina]

05-jul-2018 20:45:30.088 INFO[main]org.Apache.catalina.core.StandardEngine.StartIntern启动Servlet引擎:Apache Tomcat/8.5.31

05-jul-2018 20:45:32.224信息[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:启动日期[Thu Jul 05 20:45:32 UTC 2018];上下文层次结构的根

2018-07-05 20:45:32 INFO o.s.b.f.x.xmlBeanDefinitionReader:316-从ServletContext资源[/web-inf/dispatcher-servlet.XML]加载XML bean定义

(这里还有更多,只是想给TLD和dispatcher初始化展示一下......)

------第二次发射示例

(第一次启动以spring URL映射消息结束...)

2018-07-05 20:28:34 INFO O.S.W.S.M.M.A.RequestMappingHandlerMapping:547-将“{[/ManualBonuss],Methods=[GET]}”映射到公共java.lang.String com.deorc.controller.viewManualController.ManualBonuses(javax.servlet.http.httpServletRequest,org.springFramework.ui.model)

2018-07-05 20:28:35 INFO O.S.W.S.M.M.A.RequestMappingHandlerAdapter:574-为命名空间“Dispatcher-Servlet”查找@ControllerAdvice:WebApplicationContext:启动日期[Thu Jul 05 20:28:27 UTC 2018];上下文层次结构的根

2018-07-05 20:28:35 INFO O.S.W.S.M.M.A.RequestMappingHandlerAdapter:574-为命名空间“Dispatcher-Servlet”查找@ControllerAdvice:WebApplicationContext:启动日期[Thu Jul 05 20:28:27 UTC 2018];上下文层次结构的根

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 ms内完成

05-jul-2018 20:28:37.167信息[localhost-startStop-1]org.apache.jasper.servlet.TldScanner.ScanJars至少扫描了一个JAR以查找TLD,但未包含TLD。启用此记录器的调试日志记录,以获取已扫描但未在其中找到TLD的JAR的完整列表。在扫描过程中跳过不需要的JAR可以改善启动时间和JSP编译时间。

2018-07-05 20:28:37信息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:启动日期[Thu Jul 05 20:28:37 UTC 2018];上下文层次结构的根

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扫描但未成功。

如有任何意见或建议,将不胜感激。

共有1个答案

闽哲
2023-03-14

我终于解决了这个问题。不过,我不明白为何会出现这种情况。问题是我如何在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>

3)最后,我不确定这一点,我将servlet名称从默认的“dispatcher”更改为应用程序特定的名称以及dispatcher-servlet.xml文件。spring也可能使用dispatcher。

 类似资料:
  • 问题内容: 这些陈述有何不同? 双虚拟= 0; 双虚拟= 0.0; 双虚拟= 0.0d; 双虚拟= 0.0D; 问题答案: 尝试过一个简单的程序(使用0和100来显示“特殊”常数和通用常数之间的差异)之后,Sun Java 6编译器将为1和2输出相同的字节码(情况3和4与2相同)就编译器而言)。 因此,例如: 编译为: 但是,我在Java语言规范中看不到任何能 保证 常量表达式的编译时扩展的东西。

  • 问题内容: 我愿意在应用程序中添加一个按钮,单击该按钮将重新启动该应用程序。我搜索谷歌,但没有发现任何有用的,除了这一个。但是,此处遵循的过程违反了Java的WORA概念。 是否有其他以Java为中心的方法来实现此功能?是否可以只派生另一个副本然后退出? 提前致谢。我感谢您的帮助。 @deporter我已经尝试过您的解决方案,但是它不起作用:( @mKorbel我写的,采取的概念下面的代码,你曾在

  • 问题内容: 我目前在 此URL实际上按照以下路由指示加载Module.js类: 这包含在index.js文件中定义的和元素中。 Module类具有和方法。这些设置了记录2的初始详细信息和装入信息。到目前为止一切正常。 现在,我的问题是,在Module.js的孙组件中,我使用以下Redirect重定向到另一个页面,例如第3页: 构造函数或componentWillMount无法运行,因此记录#3无法

  • 我很沮丧...什么是Application EventMulticaster,如何初始化或刷新它?为什么需要它? 我必须如何或在哪里调用此刷新操作?!我没有胶水。这是我尝试在服务器上运行的第一个Grails应用程序。在Localhost中,一切都运行良好。 系统(开发、工作): Mac 系统(生产,不工作!) Ubuntu Server 14.04 LTS Grails版本:3.3.0 Groov

  • 我正在将Spring Boot应用程序从版本1.5.6升级到2.1.1。当我启动应用程序时,它会卡在这一行: 当我点击这个网址:http://localhost:8888/actuator/health,我得到 同样,当我点击这个网址:http://localhost:8888/swagger-ui.html,我看到斯瓦格用户界面。 但是我的主应用程序没有启动。知道为什么它卡住了吗?

  • 问题内容: 如何重新启动Java AWT应用程序?我有一个附加了事件处理程序的按钮。我应该使用什么代码来重新启动应用程序? 我想做与应用程序中相同的事情。 问题答案: 当然,可以重新启动Java应用程序。 以下方法显示了一种重新启动Java应用程序的方法: 基本上,它执行以下操作: 查找Java可执行文件(我在这里使用了Java二进制文件,但这取决于您的要求) 查找应用程序(在我的情况下是一个ja