2016-07-04 38 views
1

這是落實在一個項目中的多個不同的數據庫,使用Spring JdbcDaoSupport最好的方法?使用不同的數據庫和Spring jdbcDaoSupport

我有幾個不同的數據源和語法的數據庫:MySQL & Postgres,例如。在純java-jdbc項目中,我使用了Factory Method和Abstract Factory模式,以及多個DAOimpl類(每個DB有一個),它們具有通用的DAO接口,用於在數據庫之間進行切換。現在我使用Spring-jdbc並希望實現類似的行爲。

回答

0

我兩年前面臨着同樣的問題,我最終選擇基於一個「春自定義範圍」(http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-factory-scopes-custom)的實現。

Spring框架允許同一個bean定義的多個實例共同共存。它們僅與某些上下文環境不同。
例如,這個bean定義將根據當前處理的HTTP請求創建不同的LoginAction豆

<bean id="loginAction" class="com.foo.LoginAction" scope="request"/>

如果你創建了一個名爲「域」的自定義的範圍,你將能夠實例化幾個數據源的基礎上相同的bean定義。
基於JndiObjectFactoryBean的數據源bean定義將讓servlet容器管理數據庫連接(通過web.xml文件)。然而,你將不得不用Spring屬性來改變你的數據源名稱。
類似數據庫事務管理器的Bean也必須標記爲該範圍。

接下來,您需要一個HTTP請求運行每次啓動範圍:我可以建議你來定義數據源名稱作爲請求URL的前綴。

因爲大多數Web框架允許你攔截HTTP請求,可以處理請求之前取得預期的數據源。
然後,創建(或重用)一組專用於選定的數據源豆子,並將其存儲一個ThreadLocal變量中(您的自定義範圍的實施將依靠)

此實現應該看看乍一看有點複雜,但其用法看起來透明。

相關問題