2012-08-03 35 views
1

我已經按照我的屬性文件:如何將變量傳遞給在.property文件中引用的JVM?

connection1.username=${cloud.db.username} 
connection1.password=${cloud.db.password} 

我想在運行/調試配置

我想我需要做的是通過在JVM命令下列參數傳遞這些變量行:-Dcloud.db.username=JOHN -Dcloud.db.password=SECRET

但在代碼調用Properties.getProperty()仍然返回${cloud.db.username}

我在IntelliJ IDEA下運行它作爲junit。

回答

3

使用-D將屬性傳遞給jvm將它們放入系統屬性(通過System.getProperties()訪問)。

從代碼中的文件創建java.util.Properties爲您提供了一組完全獨立的屬性。

許多應用程序允許您通過命令行-D選項和文件指定屬性。要做到這一點,他們必須在兩者之間實施某種回退機制,並決定哪些獲得偏好。另外,有些應用程序允許你定義一個屬性作爲引用另一個的屬性,他們通常通過擴展或包裝java.util.Properties來做到這一點。

您在期待這兩種方法都能正常工作,但它們都不是由Java提供的。

如果要實現這些功能,請查看一些支持它們的開源項目。

2

我不完全理解你爲什麼要這樣做。如果你沒有真正使用它,爲什麼你需要屬性文件中的這些值?

如果你想通過這兩個參數自定義命令行參數(-D),那麼你就不能這樣做:

System.getProperty("cloud.db.username"); 
System.getProperty("cloud.db.password"); 
+0

啊,打我17秒;) – MadProgrammer 2012-08-03 22:29:03

+0

以及我一直想知道是否發佈這個答案一段時間。思想(嗯,我仍然這樣做)這是棘手的,我失去了一些東西;) – 2012-08-03 22:30:31

0

嘗試通過System.getProperty(...)訪問他們,而不是

1

的價值connection1.username將一直是"${cloud.db.username}",java不會用另一個屬性或環境變量的值替換它。

如果你想這樣的替換,那麼你就必須實現它(通過設置屬性對象的整個價值迭代,並與引用的屬性值替換所有值,那場比賽這種模式)