【发布时间】:2018-09-28 08:28:18
【问题描述】:
如何在 Spring 集成 (Java DSL) 中为完整流程定义事务?
通过 Spring 集成,我们可以定义一个示例流程:
@Bean
public IntegrationFlow myMessageFromMessageAmqpInboundFlow() {
return IntegrationFlows.from(myInboundChannel)
.transform(aMessageTransformer)
.transform(anotherMessageTransformer)
.channel(anOutputChannel)
.get();
}
我需要一个跨越整个流程的事务。目前,当我使用“aMessageTransformer”访问数据库时,在处理完此消息转换器后,事务将关闭。 但我需要一个在处理“anotherMessageTransformer”时仍未提交的事务?
我希望我只需要添加一个“@Transactional”(或 @Transactional(propagation = Propagation.REQUIRED, readOnly = true))
@Bean
@Transactional
public IntegrationFlow myMessageFromMessageAmqpInboundFlow() {
return IntegrationFlows.from(myInboundChannel)
.transform(aMessageTransformer)
.transform(anotherMessageTransformer)
.channel(anOutputChannel)
.get();
}
但这会导致“anotherMessageTransformer”中出现“无会话异常”
【问题讨论】:
-
首先,你的消息流是否发生在同一个线程中?
标签: java spring spring-integration spring-integration-dsl