背景-我正在将一些遗留代码重构到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扫描但未成功。
如有任何意见或建议,将不胜感激。
我终于解决了这个问题。不过,我不明白为何会出现这种情况。问题是我如何在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