복붙노트

[SPRING] 전파 전달을 지원하는 Spring 트랜잭션

SPRING

전파 전달을 지원하는 Spring 트랜잭션

나는 Propagation Support와 Spring 트랜잭션을 사용하는 것을 이해하고 싶습니다. Java 문서에서는 @Transactional (propagation = Propagation.SUPPORTS) 메소드가 트랜잭션 내에서 호출되면 트랜잭션을 지원하지만 트랜잭션이없는 경우 메소드가 비 트랜잭션 방식으로 실행된다는 점을 언급합니다.

이것은 전파와 관계없이 봄 거래의 행동이 아닌가. 부두.



public class ServiceBean {

    @Transactional(propagation = Propagation.SUPPORTS)
    public void methodWithSupportsTx() {
        //perform some database operations
    }
}

public class OtherServiceBean {

    @Transactional(propagation = Propagation.REQUIRED)
    public void methodWithRequiredTx() {
        //perform some database operations
        serviceBean.methodWithSupportsTx();
    }
}


위 코드 예제에서 methodWithSupportsTx ()에 @Transactional (propagation = Propagation.SUPPORTS) 주석이 있는지 여부에 관계없이 methodWithRequiredTx ()에 @Transactional 주석이 있는지 여부에 따라 트랜잭션이 실행됩니다.

그렇다면 전파 수준을 지원해야하는 필요성 / 용도는 무엇입니까?

해결법

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

    1.javadoc에서 :

    javadoc에서 :

    즉, 예를 들어, methodWithSupportsTx () 내부에서 Hibernate의 SessionFactory.getCurrentSession ()을 여러번 호출하면 같은 세션을 반환한다는 의미입니다.

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

    2.필요한 트랜잭션이 없으면 필요한 트랜잭션이 새 트랜잭션을 작성합니다. 따라서 serviceBean.methodWithSupportsTx ()를 호출하면 새로운 트랜잭션이 생성됩니다. 메소드가 실제로 트랜잭션 인 경우 트랜잭션이 없으면 봄부터 오류가 표시됩니다.

    필요한 트랜잭션이 없으면 필요한 트랜잭션이 새 트랜잭션을 작성합니다. 따라서 serviceBean.methodWithSupportsTx ()를 호출하면 새로운 트랜잭션이 생성됩니다. 메소드가 실제로 트랜잭션 인 경우 트랜잭션이 없으면 봄부터 오류가 표시됩니다.

  3. from https://stackoverflow.com/questions/6437828/spring-transactions-with-supports-propagation by cc-by-sa and MIT license