spring-boot - Spring Integration DSL 添加中流事务

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

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

@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但找不到可以使用的示例。

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

最佳答案

如果您想将两个变压器包装到事务中,您别无选择,除非将该调用隐藏在事务网关后面。当您使用原始 Java 时,这完全相似:

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

我确信您同意我的观点,我们总是必须这样做才能将它们放在同一笔交易中。

使用 Spring Integration Java DSL,您可以做到这一点:

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

您是否同意它与我们使用原始 Java 所拥有的类似,并且从优雅的角度来看还不错?

关于spring-boot - Spring Integration DSL 添加中流事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46681843/

相关文章:

java - Hibernate JPA @OneToOne 双向在 Spring-Boot 中不起作用

java - 处理数据库约束 hibernate

java - Spring Boot - PostgreSQL 驱动程序无法位于类路径中

Spring SFTP 出站适配器 - 确定文件何时发送

java - 使用 Spring Cloud Streams 测试错误流

java - 没有参数的 Spring Integration Gateway

java - 使用 Spring Batch 进行事务管理

grails - 一次性保存两个不同的域对象时使用 Grails Transaction

java - Docker id 未选择文件

java - 如何同时添加响应id和加入对象