Spring Integration DSL添加中流交易

时间:2017-10-11 07:05:02

标签: spring-boot spring-integration spring-transactions spring-dsl spring-integration-dsl

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

@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但找不到合适的例子。

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

1 个答案:

答案 0 :(得分:2)

如果要将两个变换器包装到事务中,除非在事务网关后面隐藏该调用,否则您没有选择权。当你使用原始Java时,这完全相似:

@Transactional
void myTransactionalMethod() {
    transform1();
    transform2();
}

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

使用Spring Integration Java DSL,您可以这样做:

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

你是否同意它与原始Java相似,而且从优雅的角度来看并不是那么糟糕?