如何向JavaDSL集成流添加事务支持

如何向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-

我必须向集成流添加事务支持。假设有3个变压器。第一个和第三个变压器应在同一事务中完成,但第二个变压器不应在任何事务中完成。因此,如果第三个变压器中发生错误,则不应提交来自第一个和第三个变压器的所有更改,而应提交来自第二个变压器的更改。我该怎么做?我试图添加
.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
完成工作后,原始事务应恢复并在流的其余部分继续