2010-02-24 24 views
2

看起來像一個簡單的任務。我有一個需要數據庫連接的webapp。我希望能夠在此應用程序服務器上刪除更新的.war文件,並加載新版本,而無需重新編輯applicationConfig.xml文件以指定用於生產的數據庫連接參數。在哪裏存儲數據庫密碼在春季應用程序或使用JNDI?

正在使用容器來設置數據源,然後從JNDI引用它的首選方式去?我認爲它在spring .xml文件中定義的更清晰,但是我無法想出一個乾淨的方法來讓生產密碼在我們推出新版本時只設置一次。

那麼,如何在彈簧應用程序中指定數據庫連接信息,以便您可以升級它而不必重新編輯這些文件?

如果您使用JNDI,那麼您將如何處理設置測試,因爲JNDI不會在容器之外提供?

謝謝!

回答

2

來外部數據庫連接屬性的典型方法是將它們存儲在一個文件.properties和負載使用<context:property-placeholder .../>。然後你可以有不同的.properties文件進行測試和生產。

如果您選擇JNDI,您可以使用Spring的mock JNDI support進行測試。

0

一種方法是讓您的Spring配置文件爲composed與應用程序中特定圖層相關的片段。

一個這樣的片段可能包含您的DataSource定義。爲了生產,這個片段將使用jee:jndi-lookup。然後進行測試,有不同的片段會使用DriverManagerDataSource

更新:

如果你想改變部署後的數據源,那麼你可以使用這種技術,以改變其數據源一起注入到使用提供一個PropertyPlaceholderConfigurer你的其他豆類作爲一個老post我寫的說明

例如:

<bean class="foo.bar.SomeClassNeedingDataSource""> 
    <property name="dataSource" ref="${the.datasource.to.inject}" /> 
</bean> 

<jee:jndi-lookup id="jndiDataSource" ... /> 

<bean id="driverManagerDataSource" 
    class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    ... 
</bean> 

# the properties file 
the.datasource.to.inject = jndiDataSource 
#the.datasource.to.inject = driverManagerDataSource 
+0

所以,你會有一個正確的dataSourceContext.xml文件的生產戰爭文件?更多地解釋如何工作。我想將一個WAR文件放在生產容器或開發容器中,並且只需要在完成初始設置之後不再需要其他工作。 – 2010-02-24 22:38:49

相關問題