먼저, AOP나 CGLIB 내용은 고려하지 않고 기본 @Transactional을 사용 할 경우를 다룬 내용입니다.
우선, Spring boot에서
@Transactional을 위한 기본 설정 사항
@Configuration
@EnableTransactionManagement
public class DataSourceConfig{
..
@Bean
public DataSourceTransactionManager txManager() {
return new DataSourceTransactionManager(getDataSource());
}
...
}
위와 같이 설정을 하고 사용하게 되면 @Transactional을 이용하여 트랜잭션을 사용 할 수 있다.
유의점
1. Dynamics proxy를 사용하기 때문에 인터페이스 구현이 필요하다.
따라서, 아래와 같은 구조를 가져야 한다.
public interface AService {
}
public class AServiceImp implements AService {
@Transactional
public void biz() {
}
}
2. 내부 호출, 재귀 호출 로서 사용하면 안된다.
예를 들면
public class AServiceImp implements AService {
@Transactional
public void biz() {
//insert 호출
mapper.insertBiz();
//내부호출
bizUpdate();
}
@Transactional
public void bizUpdate() {
mapper.updateBiz();
mapper.deleteBiz();
}
}
위와 같이 @Transactional을 사용한 함수여도 내부적으로 호출을 사용하게 되면
트랙잭션이 동작하지 않게 된다.
따라서, 2가지 유의점을 고려하여 @Transactional을 사용하여야 한다.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring]AOP(Aspect Oriented Programming) Schema-Based (0) | 2021.01.26 |
---|---|
[Spring]AOP(Aspect Oriented Programming) @AspectJ (0) | 2021.01.22 |
[Spring]AOP(Aspect Oriented Programming) (0) | 2021.01.21 |
[Spring]DI(Dependency Injection) (0) | 2021.01.20 |
[Spring] DB Connection timeout (0) | 2016.01.21 |