Spring 集成 DSL 添加中流事务
Spring Integration DSL adding mid flow transaction
我想将流程的特定部分设为事务性。例如,我想在 one 事务块中进行前两个转换操作。这是我使用的流程代码:
@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,但找不到要处理的示例。
有没有优雅的解决方案而不是在流程中间指向另一个网关?
如果您想将两个转换器包装到事务中,您别无选择,除非将该调用隐藏在事务网关后面。当你做 raw Java:
时完全相似
@Transactional
void myTransactionalMethod() {
transform1();
transform2();
}
我相信你同意我的看法,我们总是必须这样做才能让他们在同一笔交易中。
使用 Spring 集成 Java DSL 你可以这样做:
.gateway(f -> f
.transform(...)
.transform(...),
e -> e.transactional())
您是否同意它与我们的原始 Java 相似并且从优雅的角度来看还不错?
我想将流程的特定部分设为事务性。例如,我想在 one 事务块中进行前两个转换操作。这是我使用的流程代码:
@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,但找不到要处理的示例。
有没有优雅的解决方案而不是在流程中间指向另一个网关?
如果您想将两个转换器包装到事务中,您别无选择,除非将该调用隐藏在事务网关后面。当你做 raw Java:
时完全相似@Transactional
void myTransactionalMethod() {
transform1();
transform2();
}
我相信你同意我的看法,我们总是必须这样做才能让他们在同一笔交易中。
使用 Spring 集成 Java DSL 你可以这样做:
.gateway(f -> f
.transform(...)
.transform(...),
e -> e.transactional())
您是否同意它与我们的原始 Java 相似并且从优雅的角度来看还不错?