![](/img/trans.png)
[英]use properties from property files *AS* static final variables in java
[英]Use properties file instead of static final variables
我有很多帶靜態最終字段的類,用作默認值或配置。 創建全局配置文件的最佳方法是什么? 我應該將這些字段移動到單個靜態類,使用屬性文件還是什么?
編輯:我需要在java類和xhtml頁面中使用這個值。 價值觀不依賴於環境。 我可以編譯項目來設置新值 - 沒問題。
答案取決於......
enum
到static final
常量(避免使用“字符串類型”代碼) TimeUnit
將小時轉換為秒,而不是使用static final int SECONDS_IN_HOUR = 3600;
) public static final
這兩個方法都很好:
有一個帶有必需final
字段的靜態類。
有一個singelton但適當地從多個線程保存它。
如果可能的話,在靜態字段上使用enum
。 這樣,您可以將相關字段組合在一起。
如果這些是應用程序級別值,我寧願選擇static
類而不是singelton。
並且,您應該確定這些是不同的const值或配置值。
Y,es屬性文件始終是配置的首選。 有多種方法可以讀取它,一種是apache commons-configuration。
如果屬性是依賴於環境的,則將它們外部化(超出項目),並設置它們的路徑(例如使用-Dconfig.location=..
)。 如果它們不根據環境而改變,只需將屬性文件放在類路徑上即可。
請參閱我的這篇關於依賴於環境的屬性的文章。
然后,您可以為Properties
/ Configuration
/ ...對象創建一個static
holder,或者,如果可能的話,在任何需要的地方注入(如果使用DI框架)值。
至於我,這些方法之間的主要區別在於能夠在不更改代碼的情況下更改值。
對於靜態最終字段,您必須重新編譯源以使用新值。 使用.properties文件,您通常必須重新啟動可由系統管理員等完成的應用程序。
所以它似乎是一個問題, 它是否應該是可變的,是否應該為開發人員以外的人提供。 (在某種意義上,這是一個“負責”這些價值觀的問題:開發人員或系統管理員/用戶等)
我最喜歡的方法是:
public class MyProperties {
private static final String BUNDLE_NAME = "my.package.MyProperties"; //$NON-NLS-1$
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
.getBundle(BUNDLE_NAME);
private MyProperties() {
}
public static long getLong(String key) {
String strValue = getString(key);
long result = -1;
try {
result = Long.parseLong(strValue);
} catch (Exception exc) {
logger.error(exc.getLocalizedMessage());
}
return result;
}
public static int getInteger(String key) {
String strValue = getString(key);
int result = -1;
try {
result = Integer.parseInt(strValue);
} catch (Exception exc) {
logger.error(exc.getLocalizedMessage());
}
return result;
}
public static String getString(String key) {
String returnValue = System.getProperty(key);
if(returnValue != null && returnValue.length() > 0) {
if(logger.isDebugEnabled()) {
logger.debug(key+" assigned by system property");
}
return returnValue;
}
try {
returnValue = RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
returnValue = '!' + key + '!';
}
return returnValue;
}
}
這個簡單的類首先在資源包中搜索系統屬性中的鍵。 這意味着您可以使用-Dkey = value命令行選項覆蓋屬性設置。
將它們放在一個地方是件好事。 屬性文件還是靜態類? 屬性文件應該用於例如本地化。 用於例如String常量的靜態類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.