我正在使用以下方法定义集成流程:
@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拆分后如何添加事务支持。我不想使投票具有跨部门性。我能想到的唯一解决方案是将事务性放在激活器上,但这不能解决我的问题。我想使其适用于使用此通道的任何服务激活器。
答案 0 :(得分:1)
您的问题还不清楚,但是您绝对需要考虑将事务添加到服务激活器中。尽管您没有显示该android {
...
packagingOptions {
exclude 'lib/x86/libsupportjni.so'
exclude 'lib/x86_64/libsupportjni.so'
exclude 'lib/armeabi-v7a/libsupportjni.so'
exclude 'lib/arm64-v8a/libsupportjni.so'
}
...
}
的订阅者,但是您需要考虑没有几个订阅者。
尽管如此,我认为您的意思是将TX应用于此taskSourceChannel
上的服务激活器及其后的所有内容。
为此,Spring Integration提供了taskSourceChannel
。有关更多信息,请参见参考手册:https://docs.spring.io/spring-integration/reference/html/messaging-endpoints-chapter.html#tx-handle-message-advice。
TransactionHandleMessageAdvice
仅在TransactionSynchronizationFactory
实现中使用。但是,您仍然可以依靠AbstractPollingEndpoint
在交易环境中使用它。