我想弄清楚如何通過Spring(4.0.3)從數據庫表加載所有應用程序屬性。現在我的應用程序有一組屬性文件(大約十幾個)。這些屬性文件爲每個環境重複(而不是值)。下面採取:如何通過Spring框架(v4.0.3)從數據庫加載應用程序屬性
config.jar
- dev的
- inErrorCodes.properties
- outErrCodes.properties
- report.properties
- email.properties
- 測試 個
- inErrorCodes.properties
- outErrCodes.properties
- report.properties
- email.properties
- PROD
- inErrorCodes.properties
- outErrCodes.properties 個
- report.properties
- email.properties
,這裏是從XML配置一個片段:
<util:properties id="inboundErrorCodes"
location="classpath:config/${spring.profiles.active}/inErrCodes.properties"/>
<util:properties id="outboundErrorCodes"
location="classpath:config/${spring.profiles.active}/outErrCodes.properties"/>
<util:properties id="reportProperties"
location="classpath:config/${spring.profiles.active}/report.properties"/>
<util:properties id="emailProperties"
location="classpath:config/${spring.profiles.active}/email.properties"/>
,然後使用在源文件中:
...
import javax.inject.Inject;
import javax.inject.Named;
@Named("testService")
public class TestServiceImpl implements TestService {
private Properties inboundErrorCodes = null;
private Properties outboundErrorCodes = null;
private Properties reportProperties = null;
private Properties emailProperties = null;
@Inject
public TestServiceImpl(@Named("inboundErrorCodes") final Properties inboundErrorCodes,
@Named("outboundErrorCodes") final Properties outboundErrorCodes,
@Named("reportProperties") final Properties reportProperties,
@Named("emailProperties") final Properties emailProperties) {
一些其他警告。 errorCodes文件中的一些屬性具有相同的密鑰。例如
inErrorCodes.properties
error.code.1001=bad file name.
outErrCodes.properties
error.code.1001=bad header info.
理想情況下,所有密鑰在所有文件中都是唯一的,但這是一個傳統應用程序。所以我希望完成的是有一個數據庫表(來自所有的envs,除本地以外,它只是一個數據源)。該表可能看起來像(表名= APP_PROPERTIES)
id key value category
== =============== ============= ============
1 error.code.1001 bad file name. inErrorCodes
2 error.code.1001 bad header info. outErrorCodes
3 default.subject Successful order email
4 sales.title NE Sales Region report
一些其他的事情。我寧願使用XML配置上的註釋。我想找到一種方法來使屬性可以重新加載。如果其中一個值已在數據庫中更新,那麼如果我可以調用Spring函數來重新加載,或者甚至可能使用某種池化機制,那將會很好。當然,這代替重新啓動應用程序。另外,上面提到的$ {spring.profiles.active}是一個JVM變量(在應用程序服務器控制檯中設置),必須在每個環境中進行設置。任何指針將非常感激。我在Spring @PropertySource上搜索了很多,但是找不到與我嘗試的東西有關的任何東西。
再次感謝,
非常感謝你指點我這個資源。它絕對有助於我更好地理解如何連接數據庫表中的屬性文件和屬性。我希望通過註釋來完成大部分彈簧配置。任何有關PropertySource Spring註釋的想法?再次感謝你的幫助。 – JJPCLEV