2012-01-04 110 views
2

我有一個任務爲不同的數據源創建多個會話工廠。一個數據源將用於讀取請求,另一個數據源用於讀取請求。會話工廠處理多個數據庫連接

我們的數據庫服務(DAO包裝)的每個API都是作爲一個事務執行的。單個API可能會調用具有不同讀/寫屬性的多個DAO函數。

執行此任務的最佳方式是什麼?

+0

我認爲這個話題會給你一些幫助。 http://stackoverflow.com/questions/2017949/when-to-use-global-transaction-or-use-spring-aop-for-transaction – donnior 2012-01-04 07:07:35

回答

1

我假設不同的數據源是不同的數據庫。否則,您可以使用readOnly屬性和@Transactional註釋來管理只讀事務。

您可以在DAO層注入兩個單獨的會話工廠來管理這些事務。或者,您可以使用AbstractRoutingDataSource。看到寫在這個here

+0

是的,不同的數據源是不同的數據庫。 – instanceOfObject 2012-01-04 07:44:36

+0

然後你可以注入不同的sessionfactories。如果你有不同的事務管理器,那麼你可以使用@Transactional(「TxManagerName」)。你可以將這一切與AbstractRoutingDataSource聯繫起來。但是,您是否計劃在同一方法內跨越不同的事務數據源 - 即,如果一個數據庫回滾會影響另一個數據源,請考慮使用XA數據源。 – 2012-01-04 07:51:06

+0

這真的很有幫助。 您能否告訴我從單個API連接到多個數據庫的優缺點? 除此之外,可能很幼稚,但在Spring中使用全局事務(XA數據源)的方式是什麼? – instanceOfObject 2012-01-04 10:34:56