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
Örneğin AspectJ ile daha kolay bir yol var mı? – artemb
@artemb: Eminim eminim AspectJ yardımcı olabilir, ama yine de kolay olmayacak. – skaffman