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

27

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

在Tomcat 7中,可以通过将context.xml文件放置在/META-INF/内,并使用VirtualWebappLoader来将此位置添加到应用程序类路径中,以实现这一目标:

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

我该如何在Tomcat 8中实现相同的功能?

3个回答

39

Tomcat 8迁移指南中有一节关于这个的内容,它会引导您使用资源配置

具体来说,您将创建一个WebResourceRoot对象,其中包含其描述中的以下文本。

VirtualWebappLoader - 替换为映射到WEB-INF/lib和WEB-INF/classes的Pre-和Post-Resources.

您的新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 lib目录中。我必须使用webAppMount="/WEB-INF/lib"才能使其正常工作。此外,您可以在xml中使用变量,例如${catalina.base} - ug_
你好,Michael。我被引导到这里,因为我的帖子 https://stackoverflow.com/q/47817600/1224441 被关闭了,原因是重复。但是我无法通过你的回复和提供的链接解决我的问题。如果你有时间,能否给我指点一下?谢谢。 - user1224441

2

再来举个例子:

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

    <!--
         https://tomcat.apache.org/tomcat-8.0-doc/config/resources.html
         https://dev59.com/6mAg5IYBdhLWcg3w0Nve
         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>

1
感谢使用路径和文档基础元素。 - leole

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接