Checked 예외: RuntimeException을 제외하고 Exception 아래의 예외
Unchecked 예외: RuntimeException 및 해당 하위 클래스 및 오류(오류)
property | type | description |
---|---|---|
value | String | 선택적 정규 설명자, 사용된 트랜잭션 관리자 지정 |
propagation | 열거형: Propagation | 선택적 트랜잭션 전파 동작 설정 |
격리 | enum: Isolation | 선택적 트랜잭션 격리 수준 설정 |
readOnly | boolean | 읽기-쓰기 또는 읽기 전용 트랜잭션, 기본 읽기 쓰기 |
timeout | int(초 단위) | 트랜잭션 시간 초과 설정 |
rollbackFor | Class 객체 배열은 Throwable에서 상속되어야 합니다 | 트랜잭션 롤백을 발생시키는 예외 클래스 배열 |
rollbackFor ClassName | 클래스 이름 배열은 Throwable에서 상속되어야 합니다 | Exception 클래스 이름 배열 트랜잭션 롤백 |
noRollbackFor | 클래스 객체 배열은 Throwable에서 상속되어야 합니다 | 트랜잭션 롤백을 유발하지 않는 예외 클래스 배열 |
noRollbackForClassName | 클래스 이름 배열, 이는 Throwable | 에서 상속되어야 합니다. 트랜잭션 롤백을 발생시키지 않는 예외 클래스 이름의 수 |
@Transaction 주석을 사용할 때 Alibaba 코드 사양 플러그인은 롤백을 지정해야 함을 알려줍니다.For는 롤백을 표시합니다
기본적으로 Spring 프레임워크는 @Transaction을 사용하여 트랜잭션을 처리할 때 런타임 예외가 발생하고 확인되지 않은 예외가 발생하는 경우에만 트랜잭션을 롤백합니다. 즉, RuntimeException 인스턴스 또는 해당 하위 클래스가 발생하면 트랜잭션 메서드에서 발생된 Checked 예외는 트랜잭션 롤백으로 표시되지 않습니다.
확인된 예외를 롤백하려면: 전체 메서드 앞에 @Transactional(rollbackOn=Exception.class)
를 추가합니다. @Transactional(rollbackOn=Exception.class)
让unchecked异常不回滚: @Transactional(dontRollbackOn=RunTimeException.class)
不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
注意:
如果异常被try-catch了,事务就不会回滚,如果想让事务回滚必须再往外抛try{}catch{throw Exception}
@Transactional( dontRollbackOn =RunTimeException.class)
@Transactional(propagation=Propagation.NOT_SUPPORTED)
🎜🎜예외가 try-catch된 경우 트랜잭션이 롤백되지 않습니다. 트랜잭션을 롤백하려면
try{}catch{throw Exception}
을 throw해야 합니다. 🎜🎜🎜🎜Spring 팀은 클래스가 구현하려는 인터페이스보다는 특정 클래스(또는 클래스 메서드)에 @Transactional 주석을 사용할 것을 권장합니다. 인터페이스에서 @Transactional 주석을 사용할 수도 있지만 이 경우 적용하려면 인터페이스 기반 프록시를 설정해야 합니다. 🎜🎜🎜🎜@Transactional 주석 식별 방법은 다음과 같이 처리하는 것이 좋습니다. 최대한 간단하게. 특히 잠금이 있는 트랜잭션 방법의 경우 피할 수 있으면 트랜잭션에 넣지 않는 것이 가장 좋습니다. 일반적인 데이터베이스 쿼리 작업은 트랜잭션 앞에 배치할 수 있으며, 그렇지 않은 경우에는 추가, 삭제, 수정 등의 작업을 트랜잭션에 배치할 수 있습니다. 🎜🎜🎜🎜Code🎜@Slf4j @Service public class MemberService { @Autowired private MemberMapper memberMapper; @Transactional public Integer insert(MemberEntity memberEntity) { Integer insertResult = 0; try { insertResult = memberMapper.save(memberEntity); log.info("insertResult:{}", insertResult); int result = 1 / memberEntity.getAge(); } catch (Exception e) { log.error("errorMsg:{}", e.getMessage()); //回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } return insertResult; } }
위 내용은 Java @Transactional을 사용하여 롤백 조건을 지정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!