重新加载Tomcat时发生java.lang.IllegalStateException
我正在使用Hibernate应用程序处理Spring,它工作正常,但在启动或重新加载tomcat服务器时,我得到了重新加载Tomcat时发生java.lang.IllegalStateException,java,spring,eclipse,tomcat,illegalstateexception,Java,Spring,Eclipse,Tomcat,Illegalstateexception,我正在使用Hibernate应用程序处理Spring,它工作正常,但在启动或重新加载tomcat服务器时,我得到了java.lang.IllegalStateException异常 谁能解释一下,为什么会发生这种异常以及如何解决它 INFO:非法访问:此web应用程序实例已停止。无法加载java.net.BindException。最终的后续堆栈跟踪是由出于调试目的以及试图终止导致非法访问的线程而引发的错误引起的,没有任何功能影响。 java.lang.IllegalStateException
java.lang.IllegalStateException
异常
谁能解释一下,为什么会发生这种异常以及如何解决它
INFO:非法访问:此web应用程序实例已停止。无法加载java.net.BindException。最终的后续堆栈跟踪是由出于调试目的以及试图终止导致非法访问的线程而引发的错误引起的,没有任何功能影响。
java.lang.IllegalStateException
位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)
位于org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
位于com.mysql.jdbc.SQLError.createLinkFailureMessageBasedOnHeuristics(SQLError.java:1220)
位于com.mysql.jdbc.exceptions.jdbc4.CommunicationsException.(CommunicationsException.java:57)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源)
位于sun.reflect.delegatingConstructor或AccessorImpl.newInstance(未知源)
位于java.lang.reflect.Constructor.newInstance(未知源)
位于com.mysql.jdbc.Util.HandleneInstance(Util.java:406)
位于com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
位于com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3270)
位于com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1659)
位于com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4296)
位于com.mysql.jdbc.ConnectionImpl.cleanup(ConnectionImpl.java:1265)
位于com.mysql.jdbc.ConnectionImpl.finalize(ConnectionImpl.java:2667)
位于java.lang.System$2.invokeFinalize(未知源)
位于java.lang.ref.Finalizer.runFinalizer(未知源)
在java.lang.ref.Finalizer.access$100(未知源代码)
上,问题是因为服务器缓存。请按照以下步骤修复此问题
注意:如果您在linux机器上安装了默认的tomcat,您必须删除文件夹
/var/cache/tomcat7/Catalina
,我想给您两个选择。你可以试试。任何选择都可以满足您的需求
重新启动tomcat和apache服务器
,因为长时间使用,
它保留应用程序的旧版本temp
目录并重新启动
init()
方法,但没有destroy()
方法,则可能会发生此类错误。有关详细信息,请点击以下链接-webapp已停止或正在停止
,这意味着.war
文件或WEB-INF/WEB.xml
时间戳已更改,webapp可能正在重新加载。请检查时间戳是否正确server.xml
。
具体解决方案:
可重新加载上下文的tomcat的server.xml被设置为false。
例如:reloadable=“true”中改成false就行了,但这样做会失去热部署的优势,而且对于开发来说不是很方便,简单地修改一下就行了。这个错误无关紧要
错误原则:
原因是因为tomcat重启,因为之前的tomcat线程还没有完全关闭,重启tomcat会报告此异常,但这并不影响正常使用,只是跳转异常烦人。使用hibernate、spring或其他大型组件,当WEB应用程序系统有很多类时
如果打开Tomcatreloadable=true
,则每当相关文档发生更改时,Tomcat都会停止web应用并释放内存,然后重新加载web应用。这可能是一个巨大的项目。所以我们总是认为,如果只有某类重载函数,将极大地满足我们的调试器
更新:针对代码相关问题
首先,我想告诉您,我已经为tomcat basis提供了一些解决方案。现在我想给你一个基于代码的解决方案。请将您的代码与此问题进行交叉检查好吗?请按照网址
更新:针对MySQL相关问题
有两个问题
- 此web应用程序实例已停止。无法加载
java.net.BindException
- 此web应用程序实例已被删除
已停止。无法加载
com.mysql.jdbc
这是因为应用程序上WEB-INF/lib
目录下的MySQL JDBC驱动程序在重新发布其加载的两次后,只要能将其复制到%TOMCAT_HOME%/lib
即可解决问题。
我们可以从移动到%TOMCAT\u HOME%/lib
的WEB-INF/lib
文件夹中解决这两个异常
我怀疑这可能发生在船尾
Context path="/expert" docBase="expert" debug="0" reloadable ="false"/>
java.lang.IllegalStateException
at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
at java.lang.ref.Finalizer.access$100(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
JNI_DestroyJavaVM();