Spring 사물, 서비스 계층에 사물 주입, 두 개의 삽입 작업 수행, 서비스 메서드에서 직접 예외를 발생시킨 다음 롤백을 지정해야 합니까? 아니면 예외가 발생하지 않고 삽입이 실패하고 롤백됩니까?
여기에서는 mybatis의 프록시 dao 구현이 사용됩니다. 삽입이 실패하면 프롬프트나 예외가 발생합니까?
怪我咯2017-06-12 09:26:47
Service 클래스 또는 특정 메소드에 @Transaction(rollbackFor=Throwable.class)
주석을 사용하세요. @Transaction 주석은 기본적으로 RuntimeException만 캡처하고 롤백한다는 점에 유의해야 합니다. 즉, Exception이 발생하면 롤백되지 않습니다. 모든 예외가 롤백되도록 지정하려면 RollbackFor=Throwable.class를 추가해야 합니다
高洛峰2017-06-12 09:26:47
@Positive Energy Frontline의 답변에 동의하며, 한 메서드에서 여러 작업을 수행하는 경우 트랜잭션의 전파 범위를 고려해야 한다고 덧붙입니다. 물론 기본값은 propagation = Propagation.REQUIRED입니다. 즉, 다음을 의미합니다. 현재 거래가 없습니다. 새 거래를 생성하세요. 거래에 이미 존재하는 경우 이 거래에 추가하세요.
淡淡烟草味2017-06-12 09:26:47
컴파일 예외가 발생하면 직접 잡아서 처리할 수 있나요? 스프링 프레임워크를 사용하고 예외를 직접 잡아서 처리하기 때문에 프레임워크는 롤백에 도움이 되지 않습니다. 스프링 구성 파일의 롤 전략은 기본 작업이 예외 롤백이라는 1층의 내용과 일치합니다. 트랜잭션은 서비스 계층에 추가됩니다. 두 가지 삽입 방법 자체에는 트랜잭션이 없으므로 전파를 고려할 필요가 없습니다. 행동.
淡淡烟草味2017-06-12 09:26:47
이전 두 답변을 읽은 후 추가 내용을 추가하겠습니다. Spring의 트랜잭션은 기본적으로 인터페이스 기반 JDK 프록시입니다. 따라서 서비스 계층에서 호출된 두 개의 삽입 메서드에 대해 삽입도 서비스 계층 메서드라면 인터페이스 메서드여야 합니다. 프라이빗 메서드인 경우 프라이빗 메서드는 롤백되지 않습니다. 또한 다중 스레드 상황에서 트랜잭션 문제에 주의하십시오.