Я использую следующее, чтобы определить мой процесс интеграции:
@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.Я не хочу, чтобы опрос был транснациональным.Единственное решение, которое я могу придумать, - это установить транзакционный активатор, но это не решит мою проблему.Я хотел бы сделать его применимым к любому активатору службы, использующему этот канал.