web-dev-qa-db-ja.com

Tomcat 8のクラスパスへの外部リソースの追加

アプリの外部にあるいくつかのプロパティファイルを参照する必要がある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でこれと同じことを行うにはどうすればよいですか?

22
Michael Landes

Tomcat 8移行ガイド にこれに関するセクションがあり、 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>
34
Michael Landes

ちょうど別の例:

内部のコメントに注意し、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>
1
NS du Toit

プロパティファイルをTomcat libフォルダーにコピーするだけです。

または、conf/catalina.properties:common.loaderを拡張します

ここで説明するように、プロパティファイルのフォルダを使用します。

warが読み取れるように外部リソース(プロパティファイル)をクラスパスに追加する方法

0
weberjn