Tomcat会在一段时间后自动取消部署WAR

时间:2018-12-12 14:26:57

标签: java tomcat

我在 JDK 1.8 上遇到了 Apache Tomcat 9.0.13 的问题,该问题试图重新加载内存用户数据库,并且在失败时取消部署所有的WAR。 webapps

异常的堆栈跟踪如下:

12-Dec-2018 14:16:45.739 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
12-Dec-2018 14:16:45.766 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
12-Dec-2018 14:16:45.779 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 11788 ms
12-Dec-2018 15:34:02.582 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.users.MemoryUserDatabase.backgroundProcess Reloading memory user database [UserDatabase] from updated source [file:/P:/Tools/apache-tomcat-9.0.13/conf/tomcat-users.xml]
12-Dec-2018 15:34:02.582 SEVERE [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.users.MemoryUserDatabase.open The specified user database [conf/tomcat-users.xml] could not be found
12-Dec-2018 15:34:03.082 INFO [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.undeploy Undeploying context []
12-Dec-2018 15:34:03.082 WARNING [ContainerBackgroundProcessor[StandardEngine[Catalina]]] org.apache.catalina.startup.HostConfig.undeploy Error while removing context []
 java.lang.NoClassDefFoundError: org/apache/catalina/Lifecycle$SingleUse
        at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:269)
        at org.apache.catalina.core.ContainerBase.removeChild(ContainerBase.java:834)
        at org.apache.catalina.startup.HostConfig.undeploy(HostConfig.java:1434)
        at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1360)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1620)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:304)
        at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
        at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1179)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1401)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1405)
        at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1373)
        at java.lang.Thread.run(Thread.java:745)

请注意,tomcat-users.xml位于conf文件夹中。

有人可以帮助我解决此问题吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

运行Tomcat的服务器暂时失去了与P:驱动器的连接。这既触发了tomcat-users.xml文件的检查失败,又触发了Web应用程序的取消部署。您需要将webapps目录移动到更可靠的网络位置,或者最好将其移动到本地驱动器。

答案 1 :(得分:0)

似乎找不到文件tomcat-users.xml-可能已被删除或损坏。该文件用作Tomcat管理用户的内存数据库。再次下载Tomcat,然后将丢失/损坏的文件添加到conf文件夹中。

还要搜索server.xml的以下几行,因为该行在JNDI中注册为UserDatabase的实例。如果缺少行,请添加它们:

<Resource name="UserDatabase" auth="Container"
    pathname="conf/tomcat-users.xml"
    description="User database that can be updated and saved"
    type="org.apache.catalina.UserDatabase"
    factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
/> 

结论和更安全的方法是从头开始下载新的整个Tomcat实例。