在 Tomcat 8 中将外部资源添加到类路径

2022-09-01 17:19:41

我有一个Tomcat应用程序,它需要引用应用程序外部的一些属性文件。通常,这些存储在本地计算机上的特定位置,例如 。C:\PROJECT_NAME\conf\

在 Tomcat 7 中,这是可以通过放置一个文件来实现的,该文件内部使用 a 将此位置实质上添加到应用程序类路径中,如下所示:context.xml/META-INF/VirtualWebappLoader

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

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


答案 1

Tomcat 8 迁移指南中有一节是关于此内容的,它将指导您使用资源配置

特别是,您将创建一个 WebResourceRoot 对象,该对象在其描述中包含以下文本。

VirtualWebappLoader - 替换为映射到 WEB-INF/lib 和 WEB-INF/类的前资源和后资源

您的新上下文.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

再举一个例子:

请注意其中的注释,并注意我使用了,而不是如果我对我的“util”实现不满意,我可以在当前项目中覆盖类。我实际上不确定是否被视为“PostResource”或“PreResource”,但覆盖静态内容和类是有效的。PostResourcesPreResourcesJarResource

    <!--
         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>

推荐