簡體   English   中英

春季:用於只讀事務的單獨數據源

[英]Spring: separate datasource for read-only transactions

感謝您閱讀本文。

我有2個MySQL數據庫-主服務器用於寫入,從服務器用於讀取。 我想象的理想情況是我的應用將連接用於master進行readOnly=false事務,將slave用於readOnly=true事務。

為了實現這一點,我需要根據當前事務的類型提供有效的連接。 我的數據服務層不應該知道它使用的連接類型,而直接使用注入的SqlMapClient (我使用iBatis)。 這意味着(如果我理解正確的話)應該代理注入的SqlMapClient並且應該在運行時選擇委托。

public class MyDataService {

    private SqlMapClient sqlMap;

    @Autowired
    public MyDataService (SqlMapClient sqlMap) {
        this.sqlMap = sqlMap;
    }

    @Transactional(readOnly = true)
    public MyData getSomeData() {
        // an instance of sqlMap connected to slave should be used
    }

    @Transactional(readOnly = false)
    public void saveMyData(MyData myData) {
        // an instance of sqlMap connected to master should be used
    }
}

所以問題是-我該怎么做?

非常感謝

這是一個有趣的主意,但是您將面臨艱巨的任務。 readOnly屬性旨在作為向事務管理器的提示,在任何有意義的地方都不會真正使用它。 您必須重寫或擴展多個Spring基礎結構類。

因此,除非您一心一意地使該工作正常進行,否則,最好的選擇幾乎肯定是將兩個單獨的SqlMapClient對象注入您的DAO中,並選擇合適的方法。 @Transactional批注還需要指示要使用的事務管理器(假設您使用的是DataSourceTransactionManager而不是JpaTransactionManager ),請注意將事務管理器與SqlMapClient使用的DataSource進行匹配。

暫無
暫無

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

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