簡體   English   中英

如何使用spring指定可以動態更改的數據源

[英]How do you specify a datasource with spring that you can change dynamically

我正在開發一個應用程序,需要根據情況指定不同的數據源。 我想在測試應用程序時使用一個數據庫,而在生產環境中使用一個數據庫。 例如通過屬性文件或環境變量指定驅動程序類和登錄詳細信息。 目前,我必須更改詳細信息,然后重新啟動應用程序。 有沒有一種方法可以動態更改這些屬性而無需重新啟動應用程序?

您可以像這樣使用資源標簽 + Spring的系統屬性占位符 ...

<import resource="/resources/myDataSourceBeans-${runtime.environment}.xml"/>

您需要做的就是將/resources/myDataSourceBeans-prod.xml/resources/myDataSourceBeans-test.xml放入具有適當數據源bean的項目的類路徑中,並定義一個名為runtime.environment的系統屬性,並將其設置為等於testprod

檢查我的資源后,我發現此博客條目可能也對您有所幫助。

[更新]我剛剛意識到您請求更改運行時 我的答案僅是針對環境隔離,通常這樣就足夠了,因為您不應該訪問非生產系統中的生產數據源。

使用JNDI數據源。

從Spring in Action中引用:

Spring應用程序通常會被部署為在JEE應用程序服務器(例如WebSphere,JBoss,甚至是Tomcat這樣的Web容器)中運行。 這些服務器允許您配置要通過JNDI檢索的數據源。 以這種方式配置數據源的好處是,可以完全在應用程序外部對其進行管理,而在准備好訪問數據庫時,應用程序只需詢問數據源即可。 而且,在應用程序服務器中管理的數據源通常被合並以提高性能,並且可以由系統管理員進行熱交換。

示例applicationContext-dataSource.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:jee="http://www.springframework.org/schema/jee"
   xsi:schemaLocation=" http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
      http://www.springframework.org/schema/jee 
      http://www.springframework.org/schema/jee/spring-jee-2.0.xsd">

   <!-- D A T A S O U R C E S -->
   <jee:jndi-lookup id="dataSource"
      jndi-name="jdbc/myDatasource"
      resource-ref="true" />
</beans>

希望這可以幫助。

如果您真的不想在運行時進行更改(由於測試/生產切換的原因,這種情況很少見),則可以使用DelegatingDataSource將目標更改為一個或另一個,而無需修改所有從屬bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM