Spring 集成 DSL 添加中流事务

Spring Integration DSL adding mid flow transaction

我想将流程的特定部分设为事务性。例如,我想在 one 事务块中进行前两个转换操作。这是我使用的流程代码:

@Bean
public IntegrationFlow createNumberRange() {

    return IntegrationFlows.from("npEventPubSubChannel")

            .transform(...) 
            .transform(...)// should be transactional with above transform together
            .transform(...) // non transactional
            .handle((payload, headers) -> numbRepository.saveAll(payload))
            .get();

}

我找到了一种解决方法,即添加另一个句柄并将流程定向到事务网关,如下所示:

.handle("transactionalBean", "transactionalMetod") //Then implemented messagingGateway which consists of transactional method.

我也找到了 mid flow transactional support,但找不到要处理的示例。

有没有优雅的解决方案而不是在流程中间指向另一个网关?

如果您想将两个转换器包装到事务中,您别无选择,除非将该调用隐藏在事务网关后面。当你做 raw Java:

时完全相似
@Transactional
void myTransactionalMethod() {
    transform1();
    transform2();
}

我相信你同意我的看法,我们总是必须这样做才能让他们在同一笔交易中。

使用 Spring 集成 Java DSL 你可以这样做:

.gateway(f -> f
            .transform(...)
            .transform(...),
        e -> e.transactional())

您是否同意它与我们的原始 Java 相似并且从优雅的角度来看还不错?