eclipse javaweb開發中:this web application instance has been stopped already.

環境

javaweb開發中,Tomcat7,項目運行過程中,出現下面的錯誤

報錯

控制檯報錯內容如下

信息: Illegal access: this web application instance has been stopped already.  Could not load com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1776)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1734)
	at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)
	at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)
	at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)

Exception in thread "Timer-0" java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$AsyncTestIdleResourceTask
	at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)
	at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)
	at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1891)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1734)
	... 5 more
四月 24, 2020 3:45:01 下午 org.apache.catalina.loader.WebappClassLoaderBase loadClass
信息: Illegal access: this web application instance has been stopped already.  Could not load com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1776)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1734)
	at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)
	at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)
	at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)

Exception in thread "Timer-1" java.lang.NoClassDefFoundError: com/mchange/v2/resourcepool/BasicResourcePool$AsyncTestIdleResourceTask
	at com.mchange.v2.resourcepool.BasicResourcePool.checkIdleResources(BasicResourcePool.java:1481)
	at com.mchange.v2.resourcepool.BasicResourcePool.access$2000(BasicResourcePool.java:32)
	at com.mchange.v2.resourcepool.BasicResourcePool$CheckIdleResourcesTask.run(BasicResourcePool.java:1964)
	at java.util.TimerThread.mainLoop(Unknown Source)
	at java.util.TimerThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1891)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1734)
	... 5 more

非法訪問:這個web應用程序實例已經被停止了。無法加載com.mchange.v2.resourcepool.BasicResourcePool$AsyncTestIdleResourceTask。爲了調試目的,拋出了下面的堆棧跟蹤,並嘗試終止導致非法訪問的線程。

原因

在tomcat重啓的時候,因爲之前的tomcat中的線程還沒有完全關閉,新啓動tomcat就會報這個異常,不過這個不影響正常使用,只是跳個異常挺煩人的。使用過hibernate, spring或其他大型組件,當一個WEB應用系統中有很多類時,如果開啓了Tomcat的reloadable=true,那麼每當相關文件改變時, Tomcat會停止web app並釋放內存,然後重新加載web app.這實在是個浩大的工程。所以我們總是在想如果能有隻重載某幾個類的功能,將極大的滿足了我們的調試。

解決辦法

第一種:新啓動tomcat

第二種:修改Tomcat的service.xml的配置

如果重新啓動tomcat不能夠解決方案。

將tomcat的server.xml中的Context的reloadable設成false。比如:<Context path="/expert" docBase="expert" debug="0" reloadable="false">

在server.xml中並沒有找到context的配置信息,所以乾脆就把<Context path="/expert" docBase="expert" debug="0" reloadable="false"></Context>加在了server標籤內部,

意思就是熱部署的意思,修改爲false,會失去熱部署的優勢,而且對於開發也不是很方便,建議不要用這種方式。

<Context path="/expert" docBase="expert" debug="0" reloadable="false"></Context>

加在server.xml裏的server標籤內就可以

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章