2015-10-14 40 views
1

我想弄清楚如何通過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上搜索了很多,但是找不到與我嘗試的東西有關的任何東西。

再次感謝,

回答

相關問題