Я использую следующее, чтобы определить свой поток интеграции:
@Bean
public IntegrationFlow pollingFlow(MessageSource<Object> jdbcMessageSource) {
return IntegrationFlows.from(jdbcMessageSource,
c -> c.poller(Pollers.fixedRate(250, TimeUnit.MILLISECONDS)
.maxMessagesPerPoll(1)
.transactional()))
.split()
.channel(taskSourceChannel())
.get();
}
Я хочу вызвать активатор службы, который читает из taskSourceChannel как транзакционный. Кроме того, я хочу использовать подписку для своей транзакции.
@Bean
public TransactionSynchronizationFactory transactionSynchronizationFactory() {
ExpressionEvaluatingTransactionSynchronizationProcessor syncProcessor
= new ExpressionEvaluatingTransactionSynchronizationProcessor();
syncProcessor.setAfterCommitChannel(successChannel());
syncProcessor.setAfterRollbackChannel(failureChannel());
return new DefaultTransactionSynchronizationFactory(syncProcessor);
}
TaskSourceChannel - это канал исполнителя.
@Bean
public MessageChannel taskSourceChannel() {
return new ExecutorChannel(executor());
}
Как я могу добавить поддержку транзакций после разделения при использовании TransactionSynchronizationFactory. Я не хочу, чтобы опрос был трансакционным. Единственное решение, которое я могу придумать, - это поставить транзакцию на активатор, но это не решит мою проблему. Хотелось бы сделать его применимым к любому активатору сервиса, использующему этот канал.