提问者:小点点

Spring事务管理器和DataSourceJava配置方式传递相同的bean id而不创建新实例


目标我想在我数据源上引入一个事务管理器。

为事务管理器寻找使用相同数据源实例的正确方法。我的要求是指定Java配置方式将DS的“相同实例”传递给事务管理器。如果我的理解有差距,请纠正我。

就我而言,我有一个数据源,并且类型为自动提交 false,并且通过使用下面指定的事务管理器,我想提交/回滚事务(例如,更新操作/还原更新操作---当事务中出现错误/没有错误时)。

但是,在调试时,我注意到当我使用下面指定的java配置时,我得到了两个不同的数据源实例,并且trx.commit()不起作用。

程序化事务管理(https://docs.spring.io/spring/docs/3.0.0.M4/reference/html/ch10s06.html)

    @Bean
    public DataSource dataSource() {
        return getMyDataSource();    //new instance of datasource.//this datasource is autocommit-false
    }
    @Bean
    public DataSourceTransactionManage trxManager() {
        return getTransationManage(dataSource()); // this creates another instance of dataSource
    }

在这方面的任何帮助都非常感谢。

编辑:-我在使用Mybatis和Spring。基本上,我必须正确配置DataSource。下面的链接很有用。

[将参数动态传递给春豆][1] [Mybatis Transaction Management CTM and PTM ][2] [Spring Transaction Management Notes ][3] [Spring Transaction Management Notes ][3] [Spring

  [1]: https://stackoverflow.com/a/21202458/5086633
  [2]: http://www.mybatis.org/spring/transactions.html
  [3]: https://docs.spring.io/spring/docs/3.0.0.M4/reference/html/ch10s06.html
  [4]: https://docs.spring.io/spring/docs/current/spring-framework-reference/data-access.html#transaction

共1个答案

匿名用户

要使用< code>dataSource的同一个实例,您可以这样做:

@Bean
@Autowired
public DataSourceTransactionManage trxManager(DataSource dataSource) {
    return getTransationManage(dataSource);
}