2008-10-17 76 views
21

是否有與.NET的App.Config相當的Java?Java相當於app.config?

如果不是有一個標準的方式來保持你的應用程序設置,以便它們可以在應用程序已分發後更改?

回答

16

對於WebApps,web.xml可用於存儲應用程序設置。

除此之外,您可以使用Properties類讀取和寫入屬性文件。

您可能還想看看Preferences類,該類用於讀取和寫入系統和用戶首選項。這是一個抽象類,但您可以使用userNodeForPackage(ClassName.class)systemNodeForPackage(ClassName.class)獲取適當的對象。

+0

您可以提供關於第一個選項的更多信息:「web.xml可用於存儲應用程序設置」? 您是否建議將應用程序設置存儲爲`context-param`s? 還是別的? – theyuv 2016-04-27 10:49:00

+0

您可以在web.xml中放入幾種不同類型的參數,但我可能確實是指`context-param`。我不記得自那以來已有7.5年了。 – Powerlord 2016-04-28 22:43:49

2

簡單的方法是簡單地使用屬性文件,例如myapp.properties,其中包含所有設置。它不是進行設置的非常先進的方式,但它足夠,或者您可以擁有自己的基於XML的設置,或從數據庫獲取它們等。

9

爲了把@使用Properties類成例如代碼的Powerlord的建議(1):

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. 
    } 
} 

然後,在所述容器的所述根(例如,jar文件的頂部)放置一個文件Configuration.cnf與以下內容:

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

這種感覺並不完美(我很想聽聽改進),但不夠好我目前的需求。