2011-09-30 36 views
1

我使用org.springframework.beans.factory.config.PropertyPlaceholderConfigurer。 有3個屬性文件。所以如果屬性重複 - 最後獲勝。Java,Spring在屬性文件中使用變量的最佳實踐

第一個文件包含所有屬性,其他文件替換一些屬性。我使用例如像

log.dir=c:/log. 

可變所以,我可以像

${log.dir}/app1.log 

在屬性替代路徑的一部分。在第一文件我有這個變量的48種用途。

在第二個文件中,我從第一個文件中取得25個屬性,在第三個文件中取得5個取代。

我需要在第二個和第三個文件中重新定義這個變量的問題!

我想使用相同的名稱

log.dir 

但是,如果我在第二或第三文件中定義它 - 重新定義回第一個文件 - 但我需要使用,其餘18(48 -25 - 5 = 18)舊的屬性。 類似案例的最佳做法是什麼? 謝謝。 經過一些分析,我想要在所有屬性文件中具有相同名稱的變量,但不能覆蓋值。因此,對於第一個文件log.dir = c:\ log,對於第二個log.dir = d:\ log,對於第三個log.dir = e:\ log。並且計算每個使用的文件的路徑時。所以重寫必須只有屬性 - 而不是變量。

+0

我什至不知道你說什麼。無論如何,您可能想要着眼於編寫一個自定義的佔位符配置器,儘管這聽起來像是在濫用這個想法。 –

回答

2

你想做什麼(我認爲)是讓log.dir變量改變值,因爲配置器遍歷屬性文件並遇到你的覆蓋定義。

問題是,PropertyPlaceholderConfigurer不能這樣工作;對於每遇到${placeholder}的定義,它只檢查贏得重新定義。它確實解決佔位符考慮到它們定義文件的上下文。

我看到只有一個可行的解決方案:在每個文件中使用不同的變量名稱。編寫您自己的佔位符配置程序可能是非常差的增益與工作量比率。