2014-04-17 118 views
20

我有一个Tomcat应用程序需要引用应用程序外部的一些属性文件。通常这些存储在本地机器上的特定位置,如C:\PROJECT_NAME\conf\将外部资源添加到Tomcat中的类路径8

在Tomcat中7,这是可以实现的通过放置context.xml文件/META-INF/它使用了VirtualWebappLoader基本上这个位置添加到应用程序类路径如下内:

<Context> 
    <Loader className="org.apache.catalina.loader.VirtaulWebappLoader" 
     virtualClasspath="/PROJECT_NAME/conf" 
     searchVirtualFirst="true" /> 
</Context> 

如何实现Tomcat的同样的事情8?

回答

29

有关于这在Tomcat 8 migration guide一个部分,这将引导您使用resources configuration

特别是,您将创建一个WebResourceRoot对象包含在其说明以下文本。

VirtualWebappLoader - 通过预处理和后替换资源映射到WEB-INF/lib和WEB-INF/classes中

您的新的context.xml看起来类似以下内容:

<Context> 
    <Resources className="org.apache.catalina.webresources.StandardRoot"> 
     <PreResources className="org.apache.catalina.webresources.DirResourceSet" 
      base="C:\\PROJECT_NAME\\conf" 
      internalPath="/" 
      webAppMount="/WEB-INF/classes" /> 
    </Resources> 
</Context> 
+2

我在'jar'文件的外部目录中添加了我不想在webapps库driectory中。我必须使用'webAppMount =“/ WEB-INF/lib”'才能使其工作。你也可以在xml中使用变量,比如'$ {catalina.base}'。 –

+0

你好,迈克尔,我被链接到这里,因为我的帖子https://stackoverflow.com/q/47817600/1224441因为重复而被关闭。但我无法弄清楚如何解决您的问题,并回复您提供的链接。如果你有一段时间,你能否赐教我?谢谢。 –

1

又一个例子:

请注意里面的意见,注意,我用PostResources而不是PreResources如此如果我对我的“util”实现不满意,我可以重写当前项目中的类。我不确定JarResource是否被视为“PostResource”或“PreResource”,但覆盖静态内容和类的作品。

<!-- 
     https://tomcat.apache.org/tomcat-8.0-doc/config/resources.html 
     http://stackoverflow.com/questions/23143697/adding-external-resources-to-class-path-in-tomcat-8 
     http://stackoverflow.com/questions/34515852/tomcat-7-application-migration-to-tomcat-8 
     http://mikusa.blogspot.co.za/2014/07/tips-on-migrating-to-tomat-8-resources.html 
    --> 
    <Context path="/MY_PROJECT" docBase="/MY_PROJECT"> 
     <Resources className="org.apache.catalina.webresources.StandardRoot"> 
      <!-- Post-load the static content from my util project --> 
      <PostResources className="org.apache.catalina.webresources.DirResourceSet" 
        base="/workspace/MY_UTIL_PROJECT/WebContent" 
        webAppMount="/"> 
      </PostResources> 
      <!-- Post-load the classes from my util project --> 
      <PostResources className="org.apache.catalina.webresources.DirResourceSet" 
        base="/workspace/MY_UTIL_PROJECT/WebContent/WEB-INF/classes" 
        webAppMount="/WEB-INF/classes"> 
      </PostResources> 
      <!-- Load the JARs contained within my util project --> 
      <JarResources className="org.apache.catalina.webresources.DirResourceSet" 
        base="/workspace/MY_UTIL_PROJECT/WebContent/WEB-INF/lib" 
        webAppMount="/WEB-INF/lib"> 
      </JarResources> 
     </Resources> 
    </Context> 
相关问题