2017-10-17 5 views

답변

0

Spring 트랜잭션 기본값은

@Transactional(propagation = Propagation.REQUIRED) 

그래서 당신이 전파 속성을 지정할 필요가 없습니다 것입니다.

그래서 스프링 구성 요소의 주석은 무엇입니까? @Transactional?

  • 스프링 프레임 워크는 새 트랜잭션을 시작하고 모든 방법을 실행하고 마지막으로 트랜잭션을 커밋합니다.

  • 그러나 트랜잭션이 application context에 없으면 스프링 컨테이너가 새 트랜잭션을 시작합니다.

  • 두 개 이상의 메서드가 Propagation.REQUIRED으로 구성된 경우 논리적으로 각 메서드에 중첩 방식으로 할당 된 트랜잭션 동작은 모두 동일한 실제 트랜잭션을 사용합니다.

그래서 결과는 무엇입니까?
결과적으로 중첩 트랜잭션이 실패하면 커밋 대신 전체 트랜잭션이 실패하고 롤백됩니다 (db에 값을 삽입하지 않음).

예 :

@Service 
public class ServiceA{ 

    @Transactional(propagation = Propagation.REQUIRED) 
    public void foo(){ 
     fooB(); 
    } 

    @Transactional(propagation = Propagation.REQUIRED) 
    public void fooB(){ 
     //some operation 
    } 

} 

설명 : 또한 트랜잭션 불리는 다른 방법 fooB() 트랜잭션 동작 할당이 예 foo()foo() 및 방법은 내부 . 여기서 fooB()foo()의 측면에서 중첩 트랜잭션으로 작동합니다. 어떤 이유로 든 fooB()이 실패하면 foo()도 커밋하지 못했습니다. 오히려 롤백합니다.

0

이 주석은 데이터베이스 트랜잭션을 관리하는 데 도움이되는 것입니다.

는 봄 서비스 콩의 작은 예입니다 당신이 당신의 데이터베이스에 기록 서비스 콩이 있고 쓰기가 다음 여기에

@Transactional(propagation = Propagation.REQUIRED) 

를 사용하여 트랜잭션 내에서 수행되고 있는지 확인하려면 말할 수 있습니다 .

  • 이 서비스 방법 가 트랜잭션 내에서 실행되는이 필요합니다

    @Service 
    class MyService { 
    
        @Transactional(propagation = Propagation.REQUIRED) 
        public void writeStuff() { 
    
         // write something to your database 
        } 
    } 
    

    Transactional 주석은 것을 봄을 알려줍니다.

  • 서비스 메소드를 실행하는 동안 예외가 발생하면 Spring은 트랜잭션을 롤백하고 데이터는 데이터베이스에 기록되지 않습니다.