Tomcat 8上的AntiResourceLocking

Tom*_*mmy 4 tomcat tomcat8

我们在Windows上运行Tomcat8,由于Windows锁定了大量的属性,重新部署应用程序有时会失败.

我发现这个文档说你必须将AntiResourceLocking-attribute 添加到Context-element:Apache Tomcat 8 Configuration Reference

我们所有的服务器都是使用脚本构建的,所以这样做server.xml应该不是问题(如果它有效?):

<Engine name="Catalina" defaultHost="localhost">
  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Context antiResourceLocking="true"></Context>
  </Host>
</Engine>
Run Code Online (Sandbox Code Playgroud)

当服务器重新启动时,Tomcat会打印出以下错误,我们对于出现的问题没有真正的线索:

Failed to initialize component     [StandardEngine[Catalina].StandardHost[localhost].StandardContext[null]]

Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[null]]

Caused by: java.lang.NullPointerException
at org.apache.catalina.core.StandardContext.getObjectKeyPropertiesNameOnly(StandardContext.java:6233)
Run Code Online (Sandbox Code Playgroud)

有没有人这样做过?我错过了什么吗?

Mar*_*mas 7

你所缺少的是之间的差异conf/server.xmlconf/context.xml.

向您添加<Context .../>元素时,conf/server.xml正在定义单个上下文(Web应用程序).这相当于在作为Web应用程序的一部分打包的文件<Context .../>CATALINA_BASE/conf/<engine-name>/<host-name>/<context-name>.xml/META-INF/context.xml文件中定义元素.

<Context .../>在元件conf/context.xml定义了所有上下文(web应用)的默认值.

您添加的单个Context元素conf/server.xml失败,因为您尚未指定路径.

如果您真的想为所有Web应用程序启用反资源锁定,那么您需要将antiResourceLocking ="true"作为属性添加到<Context .../>元素中 CATALINA_BASE/conf/context.xml.

另外,此选项仅适用于Web应用程序中的资源泄漏.您可能需要考虑花时间修复这些资源泄漏.

  • `antiResourceLocking`是一个属性,而不是一个元素.你想要`<Context antiResourceLocking ="true"/>` (3认同)

Gha*_*yel -2

请检查 web.xml 中准确映射的所有 servlet 类,并确认它们的路径在服务器上实际存在。这就是引发异常的原因org.apache.catalina.LifecycleException: Failed