2

트랜잭션의 특정 부분을 트랜잭션으로 만들고 싶습니다. 예를 들어, 처음 두 변환 작업을 하나 트랜잭션 블록으로 만들고 싶습니다. 나는 또한 mid flow transactional support을 찾았지만스프링 통합 DSL 중간 흐름 트랜잭션 추가

.handle("transactionalBean", "transactionalMetod") //Then implemented messagingGateway which consists of transactional method. 

찾을 수 없습니다 :

@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(); 

} 

내가 다른 핸들을 추가 한이 같은 트랜잭션 게이트웨이로 흐름을 지시하는 등의 해결 방법을 찾을 : 여기 내가 사용하는 흐름 코드는 작업 할 예제.

흐름이 진행되는 동안 다른 게이트웨이로 연결되는 대신 우아한 솔루션이 있습니까?

답변

2

트랜잭션에 두 개의 변환기를 랩하려는 경우 트랜잭션 게이트웨이 뒤에 해당 호출을 숨기지 않는 한 선택의 여지가 없습니다. 즉, 원시 자바를 수행 할 때 완전히 유사합니다

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

난 당신이 우리가 항상 동일한 트랜잭션에서 둘하려면이 방법을해야 저에 동의하는 확신합니다. 당신은하지만이 작업을 수행 할 수 있습니다 봄 통합 자바 DSL와

:

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

당신은 우아함의 관점에서 그렇게 나쁘지 우리가 원시 자바에있는 것과 비슷하지 동의하십니까?