Cảm ơn bạn đã đọc nội dung này.Mùa xuân: nguồn dữ liệu riêng biệt cho các giao dịch chỉ đọc
Tôi có 2 cơ sở dữ liệu MySQL - làm chủ để viết, nô lệ cho lần đọc. Kịch bản hoàn hảo tôi tưởng tượng là ứng dụng của tôi sử dụng kết nối để làm chủ các giao dịch readOnly=false
, phụ thuộc vào giao dịch readOnly=true
.
Để thực hiện điều này, tôi cần phải cung cấp kết nối hợp lệ tùy thuộc vào loại giao dịch hiện tại. Lớp dịch vụ dữ liệu của tôi không nên biết loại kết nối mà nó sử dụng và chỉ sử dụng trực tiếp SqlMapClient
(tôi sử dụng iBatis). Điều này có nghĩa là (nếu tôi hiểu đúng), SqlMapClient
s được tiêm phải được ủy quyền và đại biểu phải được chọn khi chạy.
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
}
}
Câu hỏi đặt ra là - làm cách nào tôi có thể thực hiện việc này?
Cảm ơn rất nhiều
Có cách nào dễ dàng hơn với AspectJ không? – artemb
@artemb: I.m chắc chắn AspectJ sẽ giúp, nhưng nó vẫn sẽ không dễ dàng. – skaffman