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