我正在寻找一种在运行时动态获取事务管理器实例的方法。Spring Txn - 多个datasources,transactionManaggers,如何使用@Transcational在运行时决定事务管理器?
我有其基于像下面
@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上述实现动态地选择在运行时DAO基准的服务我正在使用mybatis Mapper来完成这项工作。
所以我有多个数据源(一个用于在线,一个用于存储)和多个transactionManagers在特定的DAO实例下。
我想在save()下的Service类中使用spring @Transactional,但我需要根据businessIdentifier参数指定在运行期间动态使用@Transactional的哪个“transactionManager”引用。
有没有办法做到这一点?
我想保持我的代码更清洁,尽可能少 - 不想使用facade创建2个服务或DAO实现。
感谢您的回应,我们不想引入特定的实现类作为实现n看起来完全一样,这里的问题是因为存储数据的不同模式。所有的应用程序逻辑将保持不变。所以我们正在寻找一种方法来根据收到的参数动态指定transactionmanager。 – sriharishk