> Java > java지도 시간 > Java @Transactional을 사용하여 롤백 조건을 지정하는 방법

Java @Transactional을 사용하여 롤백 조건을 지정하는 방법

WBOY
풀어 주다: 2023-04-20 10:04:11
앞으로
1447명이 탐색했습니다.

예외 분류

Java @Transactional을 사용하여 롤백 조건을 지정하는 방법

  • Checked 예외: RuntimeException을 제외하고 Exception 아래의 예외

  • Unchecked 예외: RuntimeException 및 해당 하위 클래스 및 오류(오류)

@Transactional 주석 속성에 대한 자세한 설명

property type description
value String 선택적 정규 설명자, 사용된 트랜잭션 관리자 지정
propagation 열거형: Propagation 선택적 트랜잭션 전파 동작 설정
격리 enum: Isolation 선택적 트랜잭션 격리 수준 설정
readOnly boolean 읽기-쓰기 또는 읽기 전용 트랜잭션, 기본 읽기 쓰기
timeout int(초 단위) 트랜잭션 시간 초과 설정
rollbackFor Class 객체 배열은 Throwable에서 상속되어야 합니다 트랜잭션 롤백을 발생시키는 예외 클래스 배열
rollbackFor ClassName 클래스 이름 배열은 Throwable에서 상속되어야 합니다 Exception 클래스 이름 배열 트랜잭션 롤백
noRollbackFor 클래스 객체 배열은 Throwable에서 상속되어야 합니다 트랜잭션 롤백을 유발하지 않는 예외 클래스 배열
noRollbackForClassName 클래스 이름 배열, 이는 Throwable 에서 상속되어야 합니다. 트랜잭션 롤백을 발생시키지 않는 예외 클래스 이름의 수

@Transactional

@Transaction 주석을 사용할 때 Alibaba 코드 사양 플러그인은 롤백을 지정해야 함을 알려줍니다.For는 롤백을 표시합니다

Java @Transactional을 사용하여 롤백 조건을 지정하는 방법

기본적으로 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)

Note

:

🎜🎜예외가 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;
    }
}
로그인 후 복사
🎜위의 빨간색 코드와 같이 작성하면 트랜잭션이 롤백되지 않습니다. 트랜잭션은 catch로 catch되므로 수동으로만 롤백할 수 있습니다. 🎜

위 내용은 Java @Transactional을 사용하여 롤백 조건을 지정하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿