Spring Transaction Manager и DataSource Java Config способ передать один и тот же идентификатор bean-компонента без создания нового экземпляра

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

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

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

[Pass parameters dynamically to Spring beans ][1] [Mybatis Transaction Management CTM and PTM ][2] [Spring Transaction Management Notes ][3] [Spring & JTA NOtes][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

Аннотирован ли класс, из которого вы скопировали этот код, с помощью @Configuration? Подтверждаю, не могли бы вы также включить определение класса и место создания контекста?

racraman 22.11.2018 05:32

да. Эта форма объявления зависимостей @Bean происходит только в аннотированных классах @Configuration (как показано в docs.spring.io/spring/docs/3.0.0.M4/reference/html/…). См. Также stackoverflow.com/questions/40256702/…

racraman 23.11.2018 00:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
765
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Вам не нужно ничего передавать. Spring добавит bean в ваш параметр. И да, вам нужна аннотация @Configuration в классе. Пример: pastebin.com/cS7uutWr

Mamun Sardar 22.11.2018 07:04

Если вы столкнулись с multiple bean found of dataSource, переименуйте указанный выше bean-компонент dataSource в @Bean(name = "myDataSource") и измените имя параметра соответственно DataSource myDataSource.

Mamun Sardar 22.11.2018 07:33

Другие вопросы по теме