복붙노트

[SPRING] @Transactional 어노테이션없이 다른 메소드를 호출하는 트랜잭션 메소드?

SPRING

@Transactional 어노테이션없이 다른 메소드를 호출하는 트랜잭션 메소드?

@Transactional으로 표시된 Service 클래스의 메서드를 보았지만 @Transactional로 표시되지 않은 동일한 클래스의 다른 메서드도 호출하고있었습니다.

분리 된 메소드에 대한 호출로 인해 응용 프로그램이 DB에 대한 개별 연결을 열거 나 부모 트랜잭션을 일시 중단하고 있음을 의미합니까?

@Transactional 어노테이션으로 다른 메소드에 의해 불려지는 어노테이션이없는 메소드의 기본 동작은 무엇입니까?

해결법

  1. ==============================

    1.트랜잭션 블록 내에서 @Transactional없이 메소드를 호출하면 상위 트랜잭션은 새 메소드로 계속 진행됩니다. 상위 메소드 (@Transactional)와 동일한 연결을 사용하고 호출 된 메소드에서 발생한 예외 (@Transactional을 사용하지 않으면 트랜잭션 정의에서 구성된대로 트랜잭션이 롤백됩니다.

    트랜잭션 블록 내에서 @Transactional없이 메소드를 호출하면 상위 트랜잭션은 새 메소드로 계속 진행됩니다. 상위 메소드 (@Transactional)와 동일한 연결을 사용하고 호출 된 메소드에서 발생한 예외 (@Transactional을 사용하지 않으면 트랜잭션 정의에서 구성된대로 트랜잭션이 롤백됩니다.

    동일한 인스턴스 내에서 @Transactional이있는 메서드에서 @Transactional 주석을 사용하여 메서드를 호출하면 호출 된 메서드의 트랜잭션 동작이 트랜잭션에 아무런 영향을 미치지 않습니다. 그러나 트랜잭션 정의가있는 다른 메소드의 트랜잭션 정의가있는 메소드를 호출하고 다른 인스턴스에있는 메소드를 호출하면 호출 된 메소드의 코드는 호출 된 메소드에서 제공된 트랜잭션 정의를 따릅니다.

    Spring 트랜잭션 문서의 선언적 트랜잭션 관리 섹션에서 더 자세한 정보를 찾을 수 있습니다.

    Spring 선언적 트랜잭션 모델은 AOP 프록시를 사용합니다. AOP 프록시는 트랜잭션 생성을 담당합니다. AOP 프록시는 인스턴스에있는 메소드가 인스턴스 외부에서 호출되는 경우에만 활성화됩니다.

  2. ==============================

    2.그것은 전파 수준에 달려 있습니다. 다음은 가능한 모든 수준 값입니다.

    그것은 전파 수준에 달려 있습니다. 다음은 가능한 모든 수준 값입니다.

    예를 들어 전파 수준이 중첩 된 경우 현재 트랜잭션이 "일시 중단"되고 새 트랜잭션이 생성됩니다 (참고 : 중첩 트랜잭션의 실제 생성은 특정 트랜잭션 관리자에서만 작동합니다)

    기본 전달 레벨 ( "동작"이라고하는 것)은 필수입니다. @Transactional 어노테이션이 있거나 XML을 통해 선언적으로 트랜잭션 된 "내부"메소드가 호출되는 경우 동일한 트랜잭션 내에서 실행됩니다 (예 : "새로운 것은 없습니다"가 만들어집니다.

  3. ==============================

    3.@Transactional은 트랜잭션 경계 (begin / end)를 표시하지만 트랜잭션 자체는 스레드에 바인딩됩니다. 트랜잭션이 시작되면 원래 메서드가 반환되고 트랜잭션이 커밋되거나 롤백 될 때까지 메서드 호출간에 전파됩니다.

    @Transactional은 트랜잭션 경계 (begin / end)를 표시하지만 트랜잭션 자체는 스레드에 바인딩됩니다. 트랜잭션이 시작되면 원래 메서드가 반환되고 트랜잭션이 커밋되거나 롤백 될 때까지 메서드 호출간에 전파됩니다.

    @Transactional 어노테이션이있는 다른 메소드가 호출되면 전파는 해당 어노테이션의 전파 속성에 따라 달라집니다.

  4. from https://stackoverflow.com/questions/6222600/transactional-method-calling-another-method-without-transactional-anotation by cc-by-sa and MIT license