我们的应用程序有一个侦听器,它使用来自ActiveMQ代理的消息。但是,在生产环境中,我们添加了脚本以每天重新启动Tomcat服务器。以下是在生产服务器中重新启动tomcat SERVICE的脚本;
date /t >> Restart_Production_Tomcats.log
time /t >> Restart_Production_Tomcats.log
echo "Restart Tomcat Production Server" >> Restart_Production_Tomcats.log
net stop "Application1" >> Restart_Production_Tomcats.log timeout /T 60 /NOBREAK
net start "Application1" >> Restart_Production_Tomcats.log
time /t >> Restart_Production_Tomcats.log
echo "Restart_Production_Tomcats completed" >> Restart_Production_Tomcats.log
echo "" >> Restart_Production_Tomcats.log
通常,在重新启动期间,日志文件会在每次重新启动时获得以下异常一次;
Exception in thread "org.springframework.jms.listener.DefaultMessageListenerContainer#0-3834" java.lang.NoClassDefFoundError: org/springframework/jms/connection/SmartConnectionFactory
at org.springframework.jms.connection.ConnectionFactoryUtils.releaseConnection(ConnectionFactoryUtils.java:71)
at org.springframework.jms.listener.AbstractJmsListeningContainer.refreshSharedConnection(AbstractJmsListeningContainer.java:386)
at org.springframework.jms.listener.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful(DefaultMessageListenerContainer.java:869)
at org.springframework.jms.listener.DefaultMessageListenerContainer.recoverAfterListenerSetupFailure(DefaultMessageListenerContainer.java:851)
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:982)
at java.lang.Thread.run(Thread.java:722)
然而,在某一天,我得到了超过 3000 这样的例外,那天甚至Tomcat也无法正常重启。 对我来说,似乎JVM类加载器找不到
重启期间org.springframework.jms.listener.DefaultMessageListenerContainer
课程。
有人可以解释重启tomcat时发生的事情以及我为什么会遇到此异常?但是,在我们的开发环境中,我无法复制此问题,甚至我们也无法在其他生产环境中看到此问题。是否由于在侦听器处理来自ActiveMQ的消息时重启Tomcat服务器?或重启脚本的一些问题?
我发现了类似的问题,NoClassDefFoundError in spring但是,我对这个问题的问题找不到明确的答案。