Wie zu Lesen properties-Datei, die sich außerhalb des Krieges?
Ich arbeite an einer web-Anwendung in diesen Tagen. Das nutzt nur jsps und servlets. Es ist ein kleines Programm. Jetzt habe ich alle die DataSource details im DAO-utility-Klasse. Ich will diese details in eine properties-Datei, die platziert werden können, die außerhalb des Krieges, so dass Sie je nach Umgebung können wir diese Werte ändern, ohne Einfluss auf den Krieg. Wie kann ich das erreichen?
- Ich habe zum ändern der Eigenschaften in der properties-Datei. Möchten, platzieren Sie die property-Datei in einem Pfad relativ zum KRIEG. Ich habe keinen Zugriff auf die dev und prod-Boxen. Auch glaube ich nicht, zum Lesen der properties-Datei auf der Servlet-Ebene, die ich Lesen möchte in einer utility-Klasse, die verantwortlich ist für die Bereitstellung der datasource. ServletContext und alle sind nur auf servlet-Ebene.
- Aktualisiert meine Antwort auf Ihren Kommentar.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Geben den Namen der Datei, der Verwendung von context-param-oder java-system-parameter.
1.Context-Param
2.System-Parameter
Dies ist, wie ich dies tun:
Fügen Sie die folgenden context.xml Datei (conf-Ordner der tomcat-installation dir). Sie können ändern Sie die name-Attribut, und bei Wert den Pfad des Ordners, in dem Sie Ihre Eigenschaften-Dateien.
Dann in Ihrem util-Klasse, erhalten Sie die Datei wie folgt ein: ("java:comp/env/config" ersetzen Sie 'config' mit dem Wert des "name" - Attribut verwendet context.xml)
Hoffe, dies hilft Ihnen oder jemand anderes.
Abhängig von Ihrem web-server, können Sie die properties-Datei in einem Speicherort, der in der classpath. Zum Beispiel, für manchen tomcat-Versionen, das wäre
${TOMCAT_BASE}/shared/classes
. Die webapp können, dann verwenden Sie etwas wie die folgende in die Datei zu Lesen, und haben es automatisch in diesem Ort gefunden.Können Sie auch Namen für die Datei, nachdem Sie Ihre webapp installiert ist, und verwenden Sie diesen Namen in Ihrem code beim laden der Datei aus dem Klassenpfad. Auf diese Weise können Sie die Eigenschaften von Dateien für mehrere webapps in das freigegebene Verzeichnis, ohne in Konflikt mit einander.
Haben Sie angegeben, dass Sie keinen Zugriff auf den ServletContext, weil Sie möchten, dass der code in einer utility-Klasse. Einen Weg, den Sie bekommen können, um diese Einschränkung zu registrieren, einen ServletContextListener, die erstellt eine Instanz der property-Datei-reader (da hat es Zugriff auf den Kontext) und registriert Sie so anderen code verwenden können. So etwas wie die folgenden:
Sollten Sie geben die Eigenschaft Speicherort der Datei als java-runtime-Eigenschaft, um Ihre web-container..
Wie
java -DmypropertyFile.location=c:/propertyfile.properties -jar yourContainer.jar
Wenn Sie Tomcat verwenden, können Sie fügen Sie alle Eigenschaften, die Sie, wie der Kontext, Blick auf die Dokumentation context.xml. Alle application-Server hat seine eigene Art dies zu tun, so dass Sie schauen müssen, um Beispiele dies zu tun, in JBoss, Glassfish, etc..
Anderen, härteren, aber wahrscheinlich bessere Lösung ist die Verwendung JNDI Ressourcen.
Den Ansatz habe ich in der Regel übernommen, ist für das Programm davon ausgehen, dass die Konfigurationsdatei befindet sich unter
%user.home%/.program/config.properties
.Wenn die Datei nicht gefunden wird (in der Regel auf die erste Folge) ist eine Kopie aus dem classpath ein "default" - Konfigurationsdatei und dort aufgestellt.
Gründen der Flexibilität dieser ist in der Regel überschreibbare mit -Dconfig=somepath.