복붙노트

[SPRING] Spring 재시도와 Retryable 결합

SPRING

Spring 재시도와 Retryable 결합

특정 예외에 대해 Spring 재시도 메소드가 있고 트랜잭션 (Requires_new)을 가지고있는 경우 재 시도가 완료 될 때마다 새 트랜잭션을 만들거나 기존 트랜잭션을 사용합니까?

@Retryable(maxAttempts = 5, backoff = @Backoff(delay = 250), include = {ActivitiOptimisticLockingException.class})
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void setVariable(String processId, String variableName, String variableValue){
    engine.getRuntimeService().setVariable(processId, variableName, variableValue);
}

여기서 실제로 무엇이 일어날 것인가?

해결법

  1. ==============================

    1.매번 새로운 거래가 생성됩니다. 그것은 스프링 컨텍스트로부터 메소드를 얻고 N 메소드를 호출하는 것과 같다. 모든 호출은 새로운 트랜잭션을 생성합니다 (서비스 또는 메소드에 추가 한 전파 사용). transactioanl servics 메소드를 호출하여 프록시를 호출하고, 프록시도 호출을 다시 시도하십시오. 또한 트랜잭션에 시간 초과가 있었을 수 있습니다. 새 제한 시간 동안 try try를 다시 시도하고 N 회 시도하지 않고 한 번의 제한 시간 내에 시도하십시오.

    매번 새로운 거래가 생성됩니다. 그것은 스프링 컨텍스트로부터 메소드를 얻고 N 메소드를 호출하는 것과 같다. 모든 호출은 새로운 트랜잭션을 생성합니다 (서비스 또는 메소드에 추가 한 전파 사용). transactioanl servics 메소드를 호출하여 프록시를 호출하고, 프록시도 호출을 다시 시도하십시오. 또한 트랜잭션에 시간 초과가 있었을 수 있습니다. 새 제한 시간 동안 try try를 다시 시도하고 N 회 시도하지 않고 한 번의 제한 시간 내에 시도하십시오.

  2. from https://stackoverflow.com/questions/44693983/spring-new-transaction-combined-with-retryable by cc-by-sa and MIT license