2015-05-07 79 views
5

我有一個以oracle爲數據庫的spring webservice應用程序。現在我有使用weblogic服務器創建的數據源。還使用eclipse linkg JPA來執行讀取和寫入事務(插入,讀取和更新)。現在我們要分開dataSources以讀取(讀取)和wrtie(插入或更新)事務。我們可以有多個數據源到單個數據庫嗎

我目前的數據源是如下:使用此

JNDI NAME : jdbc/POI_DS 
URL : jdbc:oracle:thin:@localhost:1521:XE 

,我做的讀取和寫入數據。

如果我做到以下幾點:

JNDI NAME : jdbc/POI_DS_READ 
URL : jdbc:oracle:thin:@localhost:1521:XE 

JNDI NAME : jdbc/POI_DS_WRITE 
URL : jdbc:oracle:thin:@localhost:1521:XE 

我知道使用XA數據源,我們可以定義多個數據源。我可以在沒有XA數據源的情況下做同樣的事情嗎?有沒有人嘗試過這種方法?

::更新::

謝謝大家的回答,我已經實現了以下解決方案。

我採取了多種數據庫方法。您將在其中定義多個transactionManagersmanagerFactory。我只採用了單一的非xa數據源(JNDI),它在EntityManagerFactory Bean中被引用。

,你可以在這裏冷藏箱以下鏈接它們是多個數據源 Multiple DataSource Approach defining @transactional value

上的事務管理器org.springframework.transaction.jta.WebLogicJtaTransactionManagerorg.springframework.orm.jpa.JpaTransactionManager還探討爲好。

回答

0

春季文檔中有一篇有趣的文章 - Dynamic DataSource Routing。這裏有一個例子,它允許你在運行時基本上切換數據源。它應該幫助你。如果您有任何更具體的問題,我很樂意幫助您。

編輯:它告訴,實際使用是通過一個配置連接到多個數據庫,但你可以設法創建不同的配置到一個數據庫與不同的參數,因爲你需要。

+0

quick問題,URL屬性定義爲金,銀,銅等不同。 JDBC:HSQLDB:HSQL://本地主機:$ {} db.port.gold /博客。在我的情況下,如果使用相同的東西,它有任何問題。另外我使用EclipseLink作爲我的JPA。讓我先執行這個方法。 – user1268890

+0

只需創建一個具有READ和WRITE屬性的Enum,它可以以相同的方式工作。根據需要提供所需的屬性。我不認爲會有關於JPA提供者的其他問題。 – user

0

我會建議使用數據庫「服務」。每個工作負載(只讀和讀寫)都將使用自己的服務來訪問數據庫。這樣,您可以使用AWR報告來獲取每項服務的統計信息。當您保持只讀並正在運行時,您還可以關閉讀寫功能。

這裏是一個指針,談到了服務的Oracle數據庫文檔:通過彈簧@Transactionalreadonly屬性集 https://docs.oracle.com/database/121/ADMIN/create.htm#CIABBCAI

0

如果你使用Spring,你應該能夠做到這一點,而無需使用數據源2爲真。我提出這個建議的原因是你似乎只關心事務性,這似乎是在春季框架中照顧的?

我建議這樣的事情對你的情況:

@Transactional(readOnly = true) 
public class DefaultFooService implements FooService { 

    public Foo getFoo(String fooName) { 
     // do something 
    } 

    // these settings have precedence for this method 
    @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) 
    public void updateFoo(Foo foo) { 
     // do something 
    } 
} 

使用這種風格,你應該能夠分裂從他們寫的同行只讀服務,甚至有讀寫服務相結合的方法。但是這兩個都不使用2個數據源。

代碼從Spring Reference

0

我敢肯定,你需要解決的數據庫/連接URL +性質層上的問題。 我會谷歌周圍的東西像讀寫複製。

與JPA和交易有關的問題。當你使用多個數據源時你註定要失敗。另外XA數據源並不是真正的解決方案。他們爲你做的唯一事情是確保多數據源操作的一致性。 XA Transaction只能跨越兩個事務(每個數據源一個)的某種邏輯事務。從事務隔離的角度來看(只要你不使用READ_UNCOMMITED)兩個數據源都使用自己的事務。這意味着讀取數據源不會看到寫入事務所做的更改。

相關問題