如何向JavaDSL集成流添加事务支持
我必须向集成流添加事务支持。假设有3个变压器。第一个和第三个变压器应在同一事务中完成,但第二个变压器不应在任何事务中完成。因此,如果第三个变压器中发生错误,则不应提交来自第一个和第三个变压器的所有更改,而应提交来自第二个变压器的更改。我该怎么做?我试图添加如何向JavaDSL集成流添加事务支持,java,spring,transactions,spring-integration,spring-integration-dsl,Java,Spring,Transactions,Spring Integration,Spring Integration Dsl,我必须向集成流添加事务支持。假设有3个变压器。第一个和第三个变压器应在同一事务中完成,但第二个变压器不应在任何事务中完成。因此,如果第三个变压器中发生错误,则不应提交来自第一个和第三个变压器的所有更改,而应提交来自第二个变压器的更改。我该怎么做?我试图添加.transform(FirstMessageTransformer,e->e.transactional(true))但是所有的转换都是在一个事务中完成的。我还尝试添加.transform(FirstMessageTransformer,e-
.transform(FirstMessageTransformer,e->e.transactional(true))
但是所有的转换都是在一个事务中完成的。我还尝试添加.transform(FirstMessageTransformer,e->e.transactional(false))
,但似乎效果不佳,因为即使发生异常,更改也会提交给所有Transformer
@Bean
public IntegrationFlow myMessageFromMessageAmqpInboundFlow() {
return IntegrationFlows.from(myInboundChannel)
.transform(FirstMessageTransformer)
.transform(SecondMessageTransformer)
.transform(ThirdMessageTransformer)
.channel(anOutputChannel)
.get();
}
试着这样做:
.transform(FirstMessageTransformer, e -> e.transactional(true))
.transform(SecondMessageTransformer,
e -> e.transactional(
new TransactionInterceptorBuilder()
.transactionManager(txManager)
.propagation(Propagation.NOT_SUPPORTED)
.build()))
.transform(ThirdMessageTransformer)
这样,您将有一个从FirstMessageTransformer
开始的整个子流的事务,以及传播。不受支持的将说明SecondMessageTransformer
暂停当前事务,并在事务外仅执行此MessageHandler
。使用SecondMessageTransformer
完成工作后,原始事务应恢复并在流的其余部分继续