Spring Transaction Manager и DataSource Java Config позволяют передавать один и тот же идентификатор компонента без создания нового экземпляра. - PullRequest
0 голосов
/ 22 ноября 2018

Цель Я хочу представить управление транзакциями в моем источнике данных.

Ищу правильный способ использования того же экземпляра источника данных для менеджера транзакций.Мое требование заключается в том, чтобы указать Java Config способ передать «тот же экземпляр» DS в Transaction Manager.Поправьте меня, если в моем понимании есть пробел.

В моем случае у меня есть источник данных типа autocommit 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. В основном мне пришлось правильно настроить DataSouce. Ниже были полезны ссылки.

[Динамически передавать параметры в bean-компоненты Spring] [1] [Mybatis Transaction Management CTM и PTM] [2] [Примечания по управлению транзакциями Spring] [3] [Примечания Spring и JTA] [4]

  [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 Ответ

0 голосов
/ 22 ноября 2018

Чтобы использовать тот же экземпляр dataSource, как насчет этого:

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