Spring 事务管理器和数据源 Java 配置方式来传递相同的 bean id 而无需创建新实例

Spring Transaction Manager and DataSource Java Config way to pass same bean id without creating a new instance

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

也在寻找为事务管理器使用相同数据源实例的正确方法。我的要求是指定 Java 配置方式将 DS 的 "Same instance" 传递给事务管理器。理解有误请指正

在我的例子中,我有一个数据源和类型自动提交 false,并且通过使用下面指定的事务管理器,我想 commit/rollback 一个事务(例如更新一个 operation/Revert更新操作 --- 当交易中出现 error/no 错误时)。

但是,在调试时我注意到当我使用下面指定的 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
    }

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

编辑:- 我在 Spring 中使用 Mybatis。基本上,我必须正确配置 DataSouce。以下链接很有用。

[Pass parameters dynamically to Spring beans ][1] [Mybatis Transaction Management CTM and PTM ][2] [Spring Transaction Management Notes ][3] [Spring & JTA NOtes][4]

  [1]: 
  [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

要回用 dataSource 的同一个实例,你怎么做:

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