복붙노트

[SPRING] @Transactional이 클래스 수준에있을 때 읽기 전용을 사용하는 방법

SPRING

@Transactional이 클래스 수준에있을 때 읽기 전용을 사용하는 방법

DAO 메서드를 호출하는 서비스 클래스에서 @Transactional을 사용하고 있습니다. 특정 서비스 방법에 대해 읽기 전용을 어떻게 사용할 수 있는지 궁금합니다. 이 서비스 메소드에서 readonly = true로 추가 @Transactional을 정의해야합니까, 아니면 다른 방법이 있습니까?

해결법

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

    1.여기 Spring API에서.

    여기 Spring API에서.

    메서드의 트랜잭션 설정을 평가할 때 가장 많이 파생 된 위치가 우선합니다. 다음 예제의 경우 DefaultFooService 클래스는 클래스 수준에서 읽기 전용 트랜잭션에 대한 설정으로 주석 처리되지만 동일한 클래스의 updateFoo (Foo) 메서드에 대한 @Transactional 주석은 정의 된 트랜잭션 설정보다 우선합니다 수업 수준.

    @Transactional(readOnly = true)
    public class DefaultFooService implements FooService {
    
      public Foo getFoo(String fooName) {
        // do something
      }
    
      // these settings have precedence for this method
      @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
      public void updateFoo(Foo foo) {
        // do something
      }
    }
    

    @Transactional 어노테이션은 인터페이스, 클래스 또는 메소드가 트랜잭션 의미론을 가져야한다는 것을 지정하는 메타 데이터입니다. 예를 들어 "이 메소드가 호출 될 때 완전히 새로운 읽기 전용 트랜잭션을 시작하여 기존 트랜잭션을 일시 중단합니다". 기본 @Transactional 설정은 다음과 같습니다.

    전달 설정은 PROPAGATION_REQUIRED입니다.

    격리 수준은 ISOLATION_DEFAULT입니다.

    트랜잭션은 읽기 / 쓰기입니다.

    트랜잭션 타임 아웃은 기본적으로 기본 트랜잭션 시스템의 기본 타임 아웃으로 제한되며, 타임 아웃이 지원되지 않으면 none으로 설정됩니다.

    모든 RuntimeException은 롤백을 트리거하고, 점검 된 예외는 그렇지 않습니다.

  2. from https://stackoverflow.com/questions/8604931/how-to-use-readonly-when-transactional-is-on-class-level by cc-by-sa and MIT license