Was ist der beste Ort, um eine Konfigurationsdatei in einer Java-Webanwendung (IST) zu speichern?

StackOverflow https://stackoverflow.com/questions/96247

Frage

Ich erstelle eine Webanwendung (WAR) und stellen Sie sie auf Tomcat. In dem Webapp gibt es eine Seite mit einem Formular, in dem ein Administrator einige Konfigurationsdaten eingeben. Ich möchte nicht, diese Daten in einem DBMS speichern, aber nur in einer XML-Datei auf dem Dateisystem. Wohin damit?

Ich mag die Datei irgendwo im Verzeichnisbaum setzen, wo die Anwendung selbst bereitgestellt wird. Sollte meine Konfiguration Datei im WEB-INF Verzeichnis? Oder es woanders setzen?

Und was ist der Java-Code in einem Servlet zu verwenden, um den absoluten Pfad des Verzeichnisses zu finden? Oder kann es mit einem relativen Pfad zugegriffen werden?

War es hilfreich?

Lösung

Was wir tun, ist es in einem separaten Verzeichnis auf dem Server zu setzen (Sie so etwas wie / config / opt / config, / root / config / home / username / config, oder alles, was Sie wollen, verwenden könnten). Wenn unsere Servlets starten, lesen sie die XML-Datei, ein paar Dinge aus ihm heraus (am wichtigsten DB-Verbindungsinformationen), und das ist es.

Ich fragte, warum wir dies einmal getan haben.

Es wäre schön, alles in der DB zu speichern, aber natürlich können Sie nicht DB Verbindungsinformationen in der DB speichern.

Sie könnten Dinge im Code codieren, aber das ist hässlich aus vielen Gründen. Wenn die Informationen jemals ändern müssen, haben Sie den Code neu zu erstellen und erneut bereitstellen. Wenn jemand eine Kopie des Codes oder WAR-Datei bekommt sie würden dann diese Informationen erhalten.

Dinge in der WAR-Datei Einlochen scheint nett, aber wenn man die Dinge will es könnte viel ändern schlechte Idee. Das Problem ist, dass, wenn Sie die Informationen ändern müssen, dann nächstes Mal, wenn Sie die Datei überschreiben umschichten so alles, was Sie nicht in der Version zu ändern, erinnerten gebaut immer in den Krieg vergessen wird.

Die Datei in einem speziellen Platz auf dem Ding-Dateisystem funktioniert ganz gut für uns. Es spielt keine große Nachteile haben. Sie wissen, wo es ist, es seperat gespeichert wird, macht auf mehrere Maschinen bereitstellen einfach, wenn sie alle unterschiedliche Konfigurationswerte müssen (da es nicht Teil des Krieges).

Die einzige andere Lösung, die ich daran denken kann, würde gut funktionieren, alles in der DB mit Ausnahme der DB Login-Info halten würde. Das würde kommen aus Java Systemeigenschaften, die durch die JVM abgerufen werden. Dies ist die Preferences API Sache erwähnt von Hans Doggen oben. Ich glaube nicht, es war um, wenn unsere Anwendung zuerst entwickelt wurde, wenn es es war nicht verwendet wurde.

Wie für den Pfad für die Konfigurationsdatei zugreifen, es ist nur eine Datei auf dem Dateisystem. Sie brauchen nicht über den Bahnweg zu kümmern. Also, wenn Ihr Servlet startet es nur die Datei auf „/config/myapp/config.xml“ öffnet (oder was auch immer), und es wird das Richtige finden. Nur hardcodeing den Weg in für diesen mich ziemlich harmlos scheint.

Andere Tipps

WEB-INF ist ein guter Ort, um Ihre Konfigurationsdatei zu setzen. Hier ist ein Code, den absoluten Pfad des Verzeichnisses von einem Servlet zu erhalten.

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")

es in WEB-INF Putting die XML-Datei von Benutzer verstecken, die versuchen, es über eine URL direkt zuzugreifen, also ja, ich habe es in WEB-INF setzen würde sagen.

Ich würde es nicht speichern, in dem Anwendungsordner, denn das ist die Konfiguration mit einer neuen Bereitstellung der Anwendung außer Kraft setzen würde.

Ich schlage vor, Sie haben einen Blick auf die Einstellungen API, oder etwas in der Benutzer-Ordner (den Benutzer, dass Tomcat ausgeführt wird) schreiben.

Die Antwort auf diese hängt davon ab, wie Sie diese Konfigurationsdatei lesen und schreiben.

Zum Beispiel kann das Spring-Framework gibt Ihnen die Möglichkeit auf Verwendung von XML-Konfigurationsdateien (oder Java-Property-Dateien); diese können in Ihrem Classpath gespeichert werden (beispielsweise im Verzeichnis WEB-INF), irgendwo anders auf dem Dateisystem, oder sogar im Speicher. Wenn Sie Spring verwenden waren dafür, dann der einfachste Ort zu speichern die Konfigurationsdatei in Ihrem WEB-INF-Verzeichnis ist, und dann Spring ClassPathXmlApplicationContext Klasse der Konfigurationsdatei zugreifen zu können.

Aber noch einmal, es hängt alles davon ab, wie Sie diese Datei zugreifen planen.

Wenn es Ihre benutzerdefinierte Konfiguration WEB-INF ist ein guter Ort dafür. Aber einige Bibliotheken können configs erfordern in WEB-INF / classes befinden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top