2008-10-17 6 views
21

Gibt es ein Java-Äquivalent zu App.Config von .NET?Java entspricht app.config?

Wenn nicht, gibt es eine Standardmethode, die Anwendungseinstellungen beizubehalten, damit sie nach der Verteilung einer App geändert werden können?

Antwort

16

Für WebApps kann web.xml zum Speichern von Anwendungseinstellungen verwendet werden.

Darüber hinaus können Sie die Properties Klasse zum Lesen und Schreiben von Eigenschaftendateien verwenden.

Sie können auch die Klasse Preferences betrachten, die zum Lesen und Schreiben von System- und Benutzereinstellungen verwendet wird. Es ist eine abstrakte Klasse, aber Sie können geeignete Objekte mit den userNodeForPackage(ClassName.class) und systemNodeForPackage(ClassName.class) erhalten.

+0

Können Sie weitere Informationen zur ersten Option angeben: "web.xml kann zum Speichern von Anwendungseinstellungen verwendet werden"? Schlägst du vor, die Einstellungen der Anwendung als Kontext-Parameter zu speichern? Oder etwas anderes? – theyuv

+0

Es gibt ein paar verschiedene Arten von Parametern, die Sie in web.xml einfügen können, aber ich habe wahrscheinlich 'context-param' gemeint. Ich erinnere mich nicht daran, wie es vor 7,5 Jahren seitdem war. – Powerlord

2

Der einfache Weg besteht darin, einfach eine Eigenschaftendatei zu haben, zB myapp.properties, in der alle Einstellungen enthalten sind. Es ist keine sehr fortgeschrittene Methode, um Einstellungen vorzunehmen, aber es reicht, oder Sie können Ihre eigene XML-basierte Konfiguration haben. oder sie aus einer Datenbank abrufen usw.

9

Um Powerlord Vorschlag (1) für die Verwendung der Properties Klasse in Beispielcode zu setzen @:

public class SomeClass { 
    public static void main(String[] args){ 
     String dbUrl = ""; 
     String dbLogin = ""; 
     String dbPassword = "";  
     if (args.length<3) { 
      //If no inputs passed in, look for a configuration file 
      URL configFile = SomeClass.class.getClass().getResource("/Configuration.cnf"); 
      try { 
       InputStream configFileStream = configFile.openStream(); 
       Properties p = new Properties(); 
       p.load(configFileStream); 
       configFileStream.close(); 

       dbUrl  = (String)p.get("dbUrl"); 
       dbLogin = (String)p.get("dbUser"); 
       dbPassword = (String)p.get("dbPassword");    
      } catch (Exception e) { //IO or NullPointer exceptions possible in block above 
       System.out.println("Useful message"); 
       System.exit(1); 
      } 
     } else { 
      //Read required inputs from "args" 
      dbUrl  = args[0]; 
      dbLogin = args[1]; 
      dbPassword = args[2];   
     } 
     //Input checking one three items here 
     //Real work here. 
    } 
} 

Dann an der Wurzel des Behälters (zB oben auf eine JAR-Datei) eine Datei mit Configuration.cnf mit der folgende Inhalt:

#Comments describing the file 
#more comments 
dbUser=username 
dbPassword=password 
dbUrl=jdbc\:mysql\://servername/databasename 

Dies ist nicht perfekt fühlen (ich würde mich interessieren Verbesserungen zu hören), aber gut genug für meine aktuellen Bedürfnisse.

+0

Ernsthaft? Sie führen also den Stream-Reader über die Datei, um die Einstellungen zu erhalten? Im Falle von mehreren Klassen benötigen Sie etwas wie eine Hilfsklasse, die übergreifend verwendet werden kann? Ist das die beste Lösung, die Java hier anbieten kann ??? Es scheint nur sehr naiv. – tom33pr

+0

Dies ist das Beste, was ich 2013 für meine Bedürfnisse verwalten konnte. Ich glaube, dass die allgemeinere Lösung im Allgemeinen in einem Anwendungsserver verpackt ist. Der Begriff "Enterprise Java Beans" kommt mir in den Sinn, obwohl ich nie persönlich in dieser Umgebung gearbeitet habe. – Pursuit