现在项目中有这么一种需求:
XXXService {
private Dao dao;
public void save(){
// 走主库
}
public void find() {
// 走从库
}
}
spring是通过 AbstractRoutingDataSource 来完成的,
nutz可否能实现类似功能?
谢谢
@wendal 因为是一样的库, 只是主 从而已, 不想在代码里写死, 还有后期希望可以动态找数据源, 分散数据库的压力,
能否有这样的实现?
按照我的理解, 只需要能动态置入datasource, 一个事务中, 就ok了
@yzhang226 那可以动态选dao实例啊
@wendal 可以动态选dao? 怎么动态置入到, 而又在事务中?
@yzhang226 注入多个dao实例,按需选用不同的dao实例
@wendal 是对一个service 的同一个方法, 需要分散数据库压力, 读多个不同的数据库, 代码是一个样的, 只是读的库不一样.
这个选择不同的dao应该是放在外层, 有很多这样的方法, 举个例子:
public Product getProductById(long id) {
// 因为有了不同的dao, 不能直接dao., 而应该有一个统一获取dao的策略,
// 怎么动态获取这个dao
return dao.fetchById(id);
}
@yzhang226 Dao只是一个接口哦
@wendal 恩, 对于这种需求, 你有什么idea来处理?
要完全透明,唯有中间件
dao层,部分透明,实现Dao接口,里面放注入2个真正的dao实例,执行fetch和query时用'读dao',其他用'写dao'
另外一个思路就是像daocache那样,根据执行的sql做不同的逻辑
另外,不同数据源的强事务很难的,不能要求完全一致
@wendal 我一开始的想法是, 使用aop, 根据service的方法名, 置入不同的dao
实现一个自定义的dao实现, 似乎不能通用, 因为dao里面无法知道service的哪一个方法, 无法根据service的方法来做判断
mysql数据库一般是一主多从, 写可以一个写dao
, 读的话有很多读dao
, 难点在于平衡多个读dao
对于同一方法