弹出多个类似数据源的事务管理器

时间:2017-06-13 08:20:03

标签: java spring transactional transactionmanager

我有两个数据源在结构上相同但在数据中没有。 我的申请必须同时处理它们。 我有控制器,服务,dao结构,看起来像这样。

Controller Modell:

@Controller
public abstract class MyFancyControllerModell{
    private MyService service;

    public MyFancyControllerModell (MyService service){
        this.service = service;
    }

    @RequestMapping(....)
    public void editSomeData(String data){....}
}

控制器实施:

@Controller
@RequestMapping(...)
public class MyControllerImpl1 extends MyFancyControllerModell{
    @Autowired
    public MyControllerImpl1(@Qualifier("myServiceInstance1") MyService service){
        super(service);
    }
}

@Controller
@RequestMapping(...)
public class MyControllerImpl2 extends MyFancyControllerModell{
    @Autowired
    public MyControllerImpl2(@Qualifier("myServiceInstance2") MyService service){
        super(service);
    }
}

服务:

public class MyService{
    private MyDao myDao;

    public MyService(MyDao myDao){
        this.myDao = myDao;
    }

    @Transactional
    public void editSomeData(String data){...}
}

我在配置类中创建了Bean,如下所示:

private DataSource lookupDataSource(final String jndiName) {
  final JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
  dsLookup.setResourceRef(true);
  return dsLookup.getDataSource(jndiName);
}

@Bean
public DataSource dataSource1(){
    return lookUpDataSource("dataSource1");
}

@Bean
public DataSource dataSource2(){
    return lookUpDataSource("dataSource2");
}

@Bean
public MyService myServiceInstance1(@Qualifier("dataSource1") DataSource dataSource){
    return new(MyService(new MyDao(dataSource))));
}

@Bean
public MyService myServiceInstance1(@Qualifier("dataSource1") DataSource dataSource){
    return new(MyService(new MyDao(dataSource)));
}

我的问题是,是否可以为两个数据源创建事务管理器而无需在服务层中声明使用哪个事务管理器?

我尝试将它们创建为bean,就像服务一样,但是没有用。

1 个答案:

答案 0 :(得分:0)

在这里查看以前与交易经理相关的问题的答案......

https://stackoverflow.com/a/1961853/7504001