【问题标题】:spring multiple transactionmanagers for similar datasources为类似的数据源创建多个事务管理器
【发布时间】:2017-11-14 21:42:53
【问题描述】:

我有两个结构相同但数据不同的数据源。 我的应用程序必须同时处理它们。 我的控制器、服务、dao 结构看起来像这样。

控制器模型:

@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,就像服务一样,但没有奏效。

【问题讨论】:

    标签: java spring transactional transactionmanager


    【解决方案1】:

    在此处查看与事务管理器相关的先前问题的答案...

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

    【讨论】:

    • 谢谢。目前,我们的 tomcat 无法处理 JTA。所以这个想法是找到另一种方式。但似乎 JTA 是唯一可行的解​​决方案。所以我们必须重新配置我们的tomcats。
    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 2016-09-25
    • 1970-01-01
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 2022-09-27
    相关资源
    最近更新 更多