2

我想將流程的特定部分作爲事務處理。例如,我想在前兩個變換操作中使用一個事務性塊。下面是我用的流量代碼:春季集成DSL添加中流量事務

@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但找不到一個工作的例子。

是否有一個優雅的解決方案,而不是指向流程中的另一個網關?

回答

2

如果您想將兩個轉換器包裝到事務中,除非將該調用隱藏在事務性網關之後,否則沒有選擇。這時候,你做原始的Java是完全相似的:

@Transactional 
void myTransactionalMethod() { 
    transform1(); 
    transform2(); 
} 

我敢肯定,你同意我的看法,我們總是要做這樣有他們兩個在同一事務。

使用Spring集成的Java DSL,你可以儘管這樣做:

.gateway(f -> f 
      .transform(...) 
      .transform(...), 
     e -> e.transactional()) 

你是否同意它是類似於我們用原始的Java有和沒有那麼糟糕,從優雅的角度?