개발/spring

13장 웹 어플리케이션과 영속성 관리

소확행개발자 2019. 4. 18. 14:27

스프링 컨테이너 기본 전략 

 

스프링 컨테이너는 트랜잭션 범위의 영속성 컨텍스트 전략을 기본으로 사용한다.

 

즉 트랜잭션의 범위와 영속성 컨텍스트의 생존 범위가 같다는 뜻이다.

 

트랜잭션을 시작할 때 영속성 컨텍스트를 생성하고 트랜잭션이 끝날 때 영속성 컨텍스트를 종료한다

 

@Service 에

 

@Transactional 어노테이션을 사용해서 시작할때 

 

호출한 메소드를 실행하기 직전에 스프링 트랜잭션 AOP가 먼저 동작한다. 

스프링 트랜잭션 AOP 는 대상 메소드를 호출하기 직전에 트랜잭션을 시작하고, 대상 메소드가 정상 종료되면 트랜잭션을 커밋하면서 종료한다. 

 

만약 서비스에 repository가 두개가 있고 트랜잭션이 같으면 항상 같은 영속성 컨텍스트를 사용한다.

 

예를들어 

 

@Transactional

@Service

method {



repo1...

repo2...



}

 

이라고 가정하면 

repo1 과 repo2 는 같은 트랜잭션 범위에 있으므로 같은 영속성 컨텍스트를 사용한다.

 

 

 

정리하자면 조금 더 출어서 이야기하자면 스프링 컨테이너는 스레드마다 각각 다른 트랜잭션을