感谢阅读。
我有2个MySQL数据库-主数据库用于写入,从数据库用于读取。我想象中的完美情景是,我的应用程序使用主数据库的连接进行readOnly=false
事务,使用从数据库的连接进行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
}
}
所以问题是 - 我该如何做到这一点?非常感谢。