【发布时间】:2016-05-26 14:24:28
【问题描述】:
我正在寻找一种在运行时动态获取事务管理器实例的方法。
我有一项服务在运行时根据如下参数动态选择 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 实例下有多个数据源(一个用于在线,一个用于商店)和多个事务管理器。
我想在 Service 类下的 save() 上利用 spring @Transactional,但我需要根据 businessIdentifier 参数在运行时动态指定要用于 @Transactional 的“transactionManager”引用。
有没有办法做到这一点?
我想让我的代码尽可能地简洁——不想使用外观创建 2 个服务或 DAO 实现。
【问题讨论】:
标签: spring transactions spring-annotations spring-4 spring-mybatis