我正在寻找一种在运行时动态获取事务管理器实例的方法。
我有一个服务,它在运行时根据下面的参数动态选择DAO引用
@Mapper //Spring-MyBatis mapper
public interface DataMapper {
void save(Object domain);
}
public class DAO {
private DataMapper mapper;
public void save(Object domain) {
mapper.save(domain);
}
}
@Component
public class Service {
private DAO onlineBusinessDAO;
private DAO storeBusinessDAO;
public void save(String businessIdentifier, Object domain) {
identifyDAOBasedOn(businessIdentifier).save(domain);
}
private DAO identifyDAOBasedOn(String businessIdentifier) {
Switch(businessIdentifier) {
case "Online":
return onlineBusinessDAO;
case "Store":
return storeBusinessDAO;
}
}
}在上面基于businessIdentifier的实现中,我决定选择哪个DAO实例,在DAO内部,我使用mybatis Mapper来完成这项工作。
因此,我在一个特定的DAO实例下有多个数据源(一个用于在线,一个用于商店)和多个transactionManagers。
我想在Service类下利用spring @Transactional on save(),但我需要根据businessIdentifier参数指定在运行时动态使用哪个"transactionManager“引用。
有没有办法做到这一点?
我想让我的代码更干净,尽可能少--不想使用facade创建2个服务或DAO的实现。
发布于 2016-05-26 14:24:29
请查看以下步骤:
1.创建使用自己的transactional managers的2 different helper DAO implementation classes。
2.只需确保both Implementation classes应该implement一个common interface
3.Main DAO类将保留这两个助手实现(利用@Qualifier来区分这两个助手实现)
4.主DAO将获得一个作为parameter的datasource名称,并基于该名称调用适当的helper bean方法
https://stackoverflow.com/questions/37451776
复制相似问题