首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Txn -多数据源,transactionManaggers,如何在运行时使用@Transcational确定事务管理器?

Spring Txn -多数据源,transactionManaggers,如何在运行时使用@Transcational确定事务管理器?
EN

Stack Overflow用户
提问于 2016-05-26 12:44:22
回答 1查看 183关注 0票数 0

我正在寻找一种在运行时动态获取事务管理器实例的方法。

我有一个服务,它在运行时根据下面的参数动态选择DAO引用

代码语言:javascript
复制
@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的实现。

EN

回答 1

Stack Overflow用户

发布于 2016-05-26 14:24:29

请查看以下步骤:

1.创建使用自己的transactional managers2 different helper DAO implementation classes

2.只需确保both Implementation classes应该implement一个common interface

3.Main DAO类将保留这两个助手实现(利用@Qualifier来区分这两个助手实现)

4.主DAO将获得一个作为parameterdatasource名称,并基于该名称调用适当的helper bean方法

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37451776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档