Добавление внешних ресурсов в класс-путь в Tomcat 8
У меня есть приложение Tomcat, которое должно ссылаться на некоторые файлы свойств, которые являются внешними по отношению к приложению. Обычно они хранятся на локальном компьютере в определенном месте, например C:\PROJECT_NAME\conf\
.
В Tomcat 7 это было достигнуто путем размещения файла context.xml
внутри /META-INF/
который использовал VirtualWebappLoader
чтобы по существу добавить это местоположение в 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/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
Еще один пример:
Обратите внимание на комментарии внутри и обратите внимание, что я использовал 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>
Ответ 3
Просто скопируйте файлы свойств в папку Tomcat lib.
Или улучшите conf/catalina.properties: common.loader
с папкой для файлов свойств, как описано здесь:
Как добавить внешние ресурсы (файл свойств) в путь к классам, чтобы война могла читать?