Skonfiguruj Tomcat, aby używał pliku właściwości do ładowania informacji o połączeniu DB

Jakie są przyjęte praktyki tworzenia wdrożenia Tomcat, które odczytuje parametry konfiguracyjne z pliku właściwości?

Byłoby miło móc dostarczyć plik WAR i określić, że Klient musi tylko utworzyć lub edytować plik właściwości w określonym katalogu. Czy to jest dość regularny sposób robienia rzeczy? Czy istnieje lepsze podejście niż to?

Author: jW., 2009-09-04

3 answers

Często rozpowszechniamy webapps dostarczając wojnę i plik XML kontekstowy, który zostaje umieszczony w katalogu tomcat/conf/Catalina/localhost i może załadować webapp z dowolnej ścieżki. Tutaj znajduje się dokument referencyjny . Daje to następujące zalety:

  • parametry kontekstowe mogą być skonfigurowane tutaj i odczytywane przez webapp
  • Tutaj można zdefiniować i skonfigurować źródła danych
  • wojna może żyć w dowolnym miejscu na systemie plików, co oznacza, że jeśli Tomcat zostanie zaktualizowany, tylko ten pojedynczy plik konfiguracyjny musi zostać przeniesiony do nowej instalacji Tomcat, aplikacja internetowa i inne pliki mogą pozostać tam, gdzie są

Jeśli naprawdę chcesz mieć Plik Właściwości, możesz ustawić parametr w pliku XML kontekstowym wskazującym na Twój plik właściwości, odczytać parametr w ServletContextListener, a następnie odczytać w pliku właściwości.

 14
Author: Adam Batkin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-04 18:29:08

Sposób, w jaki sobie z tym radzimy:

  1. niech Klient utworzy pulę połączeń w GlobalNamingResources używając uzgodnionej przez nas nazwy zasobu. Sterownik bazy danych musi znajdować się w ścieżce klasowej Tomcat.
  2. nasz plik wojenny zawiera META-INF / context.pliki xml zawierające łącze ResourceLink łączące się z pulą połączeń skonfigurowaną w kroku 1.

Jest to trochę bardziej wstępna praca niż zwykła zmiana kontekstu.informacje o połączeniu XML bezpośrednio, ale nad czas powinien się opłacić. Serwer programistyczny byłby skonfigurowany z GlobalNamingResources wskazującymi na rozwój, a serwer testowy punkt do testowania itp. Następnie ten sam plik wojenny może zostać skopiowany na każdy serwer bez edycji czegokolwiek.

To nie jest używanie plików właściwości, ale myślę, że osiąga ten sam cel. Umożliwienie użytkownikowi / klientowi Ustawienia informacji o połączeniu z bazą danych.

Przykład GlobalNamingResource:

<Resource name="jdbc/dbconnection" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1546:SID"
username="scott" password="tiger" maxActive="8" maxIdle="4"
validationQuery="select 1 from dual"
testOnBorrow="true"/>

Przykład kontekstu.xml w wojnie plik:

<Context path="/MyWebApp" docBase="MyWebApp" debug="5" reloadable="true">
    <ResourceLink name="jdbc/dbconnection" global="jdbc/dbconnection" 
          type="javax.sql.DataSource"/>
</Context>
 9
Author: Steve K,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-04 19:41:59

Dobrą praktyką jest przechowywanie konfiguracji poza strefą wojny. W czasie wojny mamy domyślną lokalizację, w której możemy szukać pliku nieruchomości. Jeśli wartość domyślna nie działa, możesz określić lokalizację za pomocą parametru JVM lub parametru kontekstowego zdefiniowanego w fragmencie kontekstu w katalogu conf/Catalina / [host]. Na przykład,

<Context docBase="/server/app.war"
    swallowOutput="true" unpackWAR="false" useNaming="false">

    <Parameter name="config-file" value="/config/db.properties" override="true" />
</Context>
 8
Author: ZZ Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-04 19:43:58