데이터베이스 액세스 층 의 병발 이상 을 제어 합 니 다.

1553 단어 springAOP
Spring 응용 프로그램의 데이터베이스 접근 층 은 Concurrency Failure Exception 이상 하위 클래스 를 던 져 서 병렬 실 패 를 보고 합 니 다.따라서 두 개의 직접적인 하위 클래스 인 OptimisticLocking Failure Exception (낙관적 잠 금 이상), PessimisticLocking Failure Exception (비관 적 잠 금 이상) 이 있다.대부분의 프로그램 에서 이 이상 은 TransactionInterceptor 로 전 파 됩 니 다.이 TransactionInterceptor 는 내부 의 업무 논 리 를 포장 하고 업무 논 리 를 관리 하 는 일 을 맡 았 다.기본 적 인 상황 에서 TransactionInterceptor 는 unchecked exception 을 처리 합 니 다. 먼저 트 랜 잭 션 스크롤 백 을 확보 한 다음 에 이상 을 다시 던 집 니 다.그러나 데이터 병발 실 패 는 대부분 일시적인 것 이기 때문에 대부분의 응용 프로그램 은 이상 을 표시 층 에 전파 하 는 것 이 아니 라 업 무 를 다시 시도 해 야 한다.
   우 리 는 Spring AOP interceptor 를 사용 하여 자동 으로 사 무 를 세 번 재 시도 할 수 있 습 니 다.
public class TransactionRetryInterceptor implements MethodInterceptor {
    protected int maxRetryCount = 3;
    public void setMaxRetryCount(int maxRetryCount) {
      this.maxRetryCount = maxRetryCount;
    }

    public Object invoke(MethodInvocation invocation) throws Throwable {
      int retryCount = 0;
      while (true)
        try {
            ReflectiveMethodInvocation inv =
                    (ReflectiveMethodInvocation) invocation;
            MethodInvocation anotherInvocation = inv.invocableClone();
            return anotherInvocation.proceed();
          } catch (ConcurrencyFailureException e) {
            if (retryCount++ > maxRetryCount)
                throw e;
            else {
                continue;
        }
     }
    }
}

좋은 웹페이지 즐겨찾기