2010-07-19 11 views
8

Bunu okuduğunuz için teşekkür ederiz.Yay: salt okunur işlemler için ayrı veri kaynağı

2 MySQL veritabanım var - yazımlar için master, okumak için slave. Hayal ettiğim mükemmel senaryo, uygulamamın readOnly=false işlemlerinde master, readOnly=true işlemleri için slave kullanmasıdır.

Bunu uygulamak için geçerli işlem türüne bağlı olarak geçerli bir bağlantı sağlamanız gerekir. Veri hizmeti katmanım, kullandığı bağlantı türünü bilmemeli ve yalnızca enjekte edilen SqlMapClient'u (iBatis'i doğrudan kullanıyorum) kullanmalıdır. Bu demektir ki (eğer doğru alırsam) enjekte edilen SqlMapClient s proxy edilmeli ve temsilci çalışma zamanında seçilmelidir.

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 
    } 
} 

Soru şu ki - bunu nasıl yapabilirim?

Çok teşekkürler

cevap

4

Bu ilginç fikir, ama elinizde zor bir işi olacaktı. readOnly özniteliği, işlem yöneticisine bir ipucu olarak tasarlanmıştır ve anlamlı herhangi bir yere gerçekten danışılmaz. Birden çok Spring altyapı sınıfını yeniden yazmanız veya uzatmanız gerekir.

Bu nedenle, bu sizin istediğiniz bir işe alma konusunda cehennemdeyseniz, en iyi seçeneğiniz DAO'nuza iki ayrı SqlMapClient nesnenin enjekte edilmesi ve uygun yöntemlerin seçilmesidir. @Transactional ek açıklamalarının, işlem yöneticisini SqlMapClient tarafından kullanılan DataSource ile eşleştirmeye özen göstererek hangi işlem yöneticisinin kullanılacağını belirtmesi gerekir (JpaTransactionManager yerine DataSourceTransactionManager kullanıyorsunuz).

+0

Örneğin AspectJ ile daha kolay bir yol var mı? – artemb

+0

@artemb: Eminim eminim AspectJ yardımcı olabilir, ama yine de kolay olmayacak. – skaffman

İlgili konular