我想将流程的特定部分设为事务性的。例如,我想在一个事务 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/