在 spring 集成 dsl 中配置 spring 事务

Configuring spring transactions in spring integration dsl

我目前正在使用 spring-integration-dsl 配置 spring 集成,如下所示

@Bean
public IntegrationFlow flow() {
    return IntegrationFlows.from(inboundServer())
            .transform(Transformers.objectToString())
            .transform(...)
            .route(...)
            .transform(Transformers.toJson())
            .channel(...)
            .get();
}

@Bean
public PlatformTransactionManager transactionManager() {
    ....
}

我不知道如何配置流程以使用我配置的事务管理器。

实际上,Spring 集成 Java DSL 支持所有事务功能,这些功能可用于 XML components.

请提供您希望从何处开始交易的更多信息。请记住,TX 支持仅限于线程边界。因此,您可以从 poller 或从 JMS(AMQP) 消息驱动通道适配器启动 TX。

或使用 TransactionInterceptor 作为流程中任何端点的建议。但在这种情况下,TX 仅限于 AbstractReplyProducingMessageHandler.handleRequestMessage.

更新

为流程的某些部分启动 TX 不是标准任务,它可以作为 unit of work 一些交易黑盒来实现。为此,我们有一个像 Gateway 这样的组件。因此,您指定了一些接口,用 @MessagingGateway 标记它,在 @EnableConfiguration 旁边添加 @IntegrationComponentScan 并用 @Transactional 标记该接口的方法。此网关的 requestChannel 应使用 JDBC 和 Jackson 转换将消息发送到某个单独的流,并等待结果在主流中继续。 TX 将在 return 从该网关的方法调用中完成。

并从 .handle("myGateway", "getData")

中正常调用该网关 service-activator