2014-04-17 9 views
20

Mam aplikację Tomcat, która musi odwoływać się do niektórych plików właściwości, które są zewnętrzne dla aplikacji. Zwykle są one przechowywane na lokalnym komputerze w określonym miejscu, takim jak C:\PROJECT_NAME\conf\.Dodawanie zasobów zewnętrznych do ścieżki klasy w Tomcat 8

W Tomcat 7 było to osiągalne poprzez umieszczenie pliku wewnątrz od /META-INF/ który użył VirtualWebappLoader do zasadniczo dodać tę lokalizację do ścieżki klasy aplikacji w następujący sposób context.xml:

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

Jak mogę osiągnąć to samo w Tomcat 8?

Odpowiedz

29

Jest to odcinek o tym w Tomcat 8 migration guide który skieruje Cię do korzystania z resources configuration

W szczególności, będzie stworzenie WebResourceRoot obiekt, który zawiera następujący tekst w jego opisie.

VirtualWebappLoader - Zastąpiony przed i po Zasobów odwzorowane do WEB-INF/lib i zajęcia WEB-INF/

Nowy context.xml będzie wyglądać mniej więcej tak:

<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

Dodałem do zewnętrznego katalogu plików 'jar', które nie chciałem być w webapps lib driectory. Musiałem użyć 'webAppMount ="/WEB-INF/lib "', aby uruchomić go. Możesz również użyć zmiennych w xml, takich jak '$ {catalina.base}'. –

+0

Witaj, Michael, zostałem tutaj połączony, ponieważ mój wpis https://stackoverflow.com/q/47817600/1224441 został zamknięty z powodu duplikowania. Ale nie mogę wymyślić, jak rozwiązać mój problem z twoją odpowiedzią i linkami, które podałeś. Czy możesz mnie oświecić, jeśli masz trochę czasu? Dzięki. –

1

Jeszcze jeden przykład:

Proszę zwrócić uwagę na komentarze wewnątrz i zauważ, że użyłem PostResources i tak nie PreResources że mogę zastąpić klasy w moim bieżącym projekcie, jeśli nie jestem zadowolony z mojej implementacji "util". Nie jestem faktycznie pewien, czy JarResource jest traktowany jako "PostResource" lub "PreResource", ale nadpisywanie statycznej zawartości i klas działa.

<!-- 
     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> 
Powiązane problemy