찾다

 >  Q&A  >  본문

Spring 트랜잭션 롤백 문제

Spring 사물, 서비스 계층에 사물 주입, 두 개의 삽입 작업 수행, 서비스 메서드에서 직접 예외를 발생시킨 다음 롤백을 지정해야 합니까? 아니면 예외가 발생하지 않고 삽입이 실패하고 롤백됩니까?
여기에서는 mybatis의 프록시 dao 구현이 사용됩니다. 삽입이 실패하면 프롬프트나 예외가 발생합니까?

漂亮男人漂亮男人2727일 전936

모든 응답(4)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-06-12 09:26:47

    Service 클래스 또는 특정 메소드에 @Transaction(rollbackFor=Throwable.class) 주석을 사용하세요. @Transaction 주석은 기본적으로 RuntimeException만 캡처하고 롤백한다는 점에 유의해야 합니다. 즉, Exception이 발생하면 롤백되지 않습니다. 모든 예외가 롤백되도록 지정하려면 RollbackFor=Throwable.class를 추가해야 합니다

    회신하다
    0
  • 高洛峰

    高洛峰2017-06-12 09:26:47

    @Positive Energy Frontline의 답변에 동의하며, 한 메서드에서 여러 작업을 수행하는 경우 트랜잭션의 전파 범위를 고려해야 한다고 덧붙입니다. 물론 기본값은 propagation = Propagation.REQUIRED입니다. 즉, 다음을 의미합니다. 현재 거래가 없습니다. 새 거래를 생성하세요. 거래에 이미 존재하는 경우 이 거래에 추가하세요.

    회신하다
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-12 09:26:47

    컴파일 예외가 발생하면 직접 잡아서 처리할 수 있나요? 스프링 프레임워크를 사용하고 예외를 직접 잡아서 처리하기 때문에 프레임워크는 롤백에 도움이 되지 않습니다. 스프링 구성 파일의 롤 전략은 기본 작업이 예외 롤백이라는 1층의 내용과 일치합니다. 트랜잭션은 서비스 계층에 추가됩니다. 두 가지 삽입 방법 자체에는 트랜잭션이 없으므로 전파를 고려할 필요가 없습니다. 행동.

    회신하다
    0
  • 淡淡烟草味

    淡淡烟草味2017-06-12 09:26:47

    이전 두 답변을 읽은 후 추가 내용을 추가하겠습니다. Spring의 트랜잭션은 기본적으로 인터페이스 기반 JDK 프록시입니다. 따라서 서비스 계층에서 호출된 두 개의 삽입 메서드에 대해 삽입도 서비스 계층 메서드라면 인터페이스 메서드여야 합니다. 프라이빗 메서드인 경우 프라이빗 메서드는 롤백되지 않습니다. 또한 다중 스레드 상황에서 트랜잭션 문제에 주의하십시오.

    회신하다
    0
  • 취소회신하다