У нас есть существующий источник данных, который находится в спящем режиме для нашего приложения Spring Boot.
Теперь мы хотели бы также использовать Neo4j, для которого требуется собственный менеджер транзакций. Это приведет к двум менеджерам транзакций.
Теперь из того, что мы собрали, нам нужно использовать ChainedTransactionManager
, где мы передаем JpaTransactionManager
и Neo4jTransactionManager
в качестве параметров.
Единственная проблема в том, что когда мы создаем менеджер ChainedTransaction, например, следующим образом
@Bean
public PlatformTransactionManager chainedTransactionManager(SessionFactory sessionFactory,
Neo4jProperties properties,
ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
JpaTransactionManager jpaTransactionManager = jpaTransactionManager(transactionManagerCustomizers.getIfAvailable());
Neo4jTransactionManager neo4jTransactionManager = neo4jtransactionManager(sessionFactory, properties, transactionManagerCustomizers);
return new ChainedTransactionManager(neo4jTransactionManager);
}
, тогда проблема в том, что нам кажется, что нам нужно скопировать и / или написать почти весь код в JpaBaseConfiguration
, предоставленный Spring, потому что в Весенний класс это говорит.
@Bean
@ConditionalOnMissingBean
public PlatformTransactionManager transactionManager() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
if (this.transactionManagerCustomizers != null) {
this.transactionManagerCustomizers.customize(transactionManager);
}
return transactionManager;
}
Где метод не срабатывает (я считаю, из-за @ConditionalOnMissingBean
). Итак, как нам заставить этот метод работать и создать JpaTransactionManager, который мы можем автоматически связать перед созданием нашего менеджера.
По крайней мере, если мы не можем создать JpaTransactionManager, нам бы хотелось иметь другие классы EntityManagerFactoryBuilder
, которые также аннотируется @ConditionalOnMissingBean
быть создан.
Как мы могли бы достичь вышеупомянутого?