静态变量读取属性文件_一种通过变量插值读取属性的方法
靜態變量讀取屬性文件
最近,我嘗試在應用程序服務器中定義和讀取全局屬性。 在應用程序服務器中配置的此類屬性的好處–可以在此服務器上部署的所有Web應用程序之間共享該屬性。 每個部署的應用程序都可以讀取同一屬性,該屬性僅在一個位置配置一次。 我試圖做的是一個系統屬性,值部分包含另一個系統屬性。 在應用服務器JBoss / WildFly中,您可以例如在配置文件standalone.xml定義系統屬性。 我設置屬性exporting.service.config.file 。
<system-properties><property name="exporting.service.config.file" value="${jboss.server.config.dir}\exporting\exporting-service.properties"/> </system-properties>jboss.server.config.dir指向JBoss中的基本配置目錄。 此屬性由JBoss自動設置。 在這個例子中,我們有一個所謂的Variable Interpolation 。 維基百科的定義 :“變量插值(也就是變量替換或變量擴展)是評估包含一個或多個占位符的字符串文字的過程,產生的結果是,占位符被其對應的值替換”。 屬性值占位符${...}另一個示例是以下配置:
application.name=My App application.version=2.0 application.title=${application.name} ${application.version}現在,當我們嘗試使用Java的System.getProperty(...)從第一個示例獲取系統屬性時
String globalConfigFile = System.getProperty("exporting.service.config.file");我們將獲得${jboss.server.config.dir}\exporting\exporting service.properties 。 占位符${jboss.server.config.dir}未解析。 第二個例子中也有同樣的麻煩。
用變量插值讀取屬性的最簡單方法是什么? 好吧,這里有帶有PlaceholderConfigurerSupport的Spring框架等等。 但是擁有如此大的框架(如依賴關系)是一項開銷。 有輕量級的圖書館嗎? 是的,可以確定-Apache Commons Configuration 。 Apache Commons Configuration為屬性提供了特殊的前綴名稱,以便在特定上下文中評估它們。 例如:
- sys:此前綴將變量標記為系統屬性。 Commons Configuration將搜索具有給定名稱的系統屬性,并將變量替換為其值。
- const:前綴表示將變量解釋為類的常量成員字段。 變量的名稱必須是完全限定的類名稱。
- env:前綴引用特定于操作系統的環境屬性。
文檔中的一些示例:
user.file = ${sys:user.home}/settings.xml action.key = ${const:java.awt.event.KeyEvent.VK_CANCEL} java.home = ${env:JAVA_HOME}現在,我可以將所需的依賴項添加到我的Maven項目中
<dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.10</version> </dependency>在jboss.server.config.dir之前設置前綴sys:
<system-properties><property name="exporting.service.config.file" value="${sys:jboss.server.config.dir}\exporting\exporting-service.properties"/> </system-properties>并編寫以下代碼
import org.apache.commons.configuration.SystemConfiguration;...SystemConfiguration systemConfiguration = new SystemConfiguration(); String globalConfigFile = systemConfiguration.getString("exporting.service.config.file"); ...我筆記本上的字符串globalConfigFile的值為C:\Development\Servers\jboss-as-7.1.1.Final\standalone\configuration\exporting\exporting-service.properties 。 前綴sys:將變量標記為系統屬性。 Commons Configuration將搜索具有給定名稱的系統屬性,并將變量替換為其值。 完整的代碼:
import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.configuration.SystemConfiguration;...PropertiesConfiguration propertiesConfiguration = new PropertiesConfiguration(); SystemConfiguration systemConfiguration = new SystemConfiguration(); String globalConfigFile = systemConfiguration.getString("exporting.service.config.file"); if (globalConfigFile != null) {try { propertiesConfiguration.setDelimiterParsingDisabled(true); propertiesConfiguration.load(globalConfigFile);} catch (ConfigurationException e) {LOG.log(Level.INFO, "Cannot read global properties");} }任何單個屬性都可以讀取,例如
propertiesConfiguration.getString("someKey") propertiesConfiguration.getString("someKey", someDefaultValue) propertiesConfiguration.getBoolean("someKey") propertiesConfiguration.getBoolean("someKey", someDefaultValue) propertiesConfiguration.getInteger("someKey") propertiesConfiguration.getInteger("someKey", someDefaultValue)usw。 就這樣。 讓我知道是否知道使用變量插值讀取屬性的另一種簡單方法。
翻譯自: https://www.javacodegeeks.com/2015/04/a-way-to-read-properties-with-variable-interpolation.html
靜態變量讀取屬性文件
總結
以上是生活随笔為你收集整理的静态变量读取属性文件_一种通过变量插值读取属性的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux命令复制文件到指定目录(lin
- 下一篇: 次氯酸消毒剂备案(次氯酸水备案)