소스 코드 파일 또는 xml 파일로 직접 트랜잭션 관리 내용을 설정할 수 있다. 트랜잭션 관리 주체는 추상화된 PlatformTransactionManager
인터페이스이며, DB와 관련하여 작업을 처리해야 하므로 관련된 DataSource
인터페이스 역시 빈으로 등록되어야 한다. JPA와 연동하기 위하여 EntityManagerFactoryBean
에 DataSource
를 세팅해주어야 한다.
@Configuration
@EnableTransactionManagement
public class JpaConfig{
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){
final LocalContainerEntityManagerFactoryBean em =
new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource());
...
...
return em;
}
@Bean
public DataSource dataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
...
...
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager(){
JpaTransactionManager transactionManager
= new JpaTransactionManager();
transactionManager.setEntityManagerFactory(
entityManagerFactoryBean().getObject() );
return transactionManager;
}
}
@Transactional
을 통한 트랜잭션 관리@org.springframework.transaction.annotation
RuntimeException
또는 Error
가 발생했을 경우 rollback 된다.rollbackFor
/noRollbackFor
and rollbackForClassName
/noRollbackForClassName
, 속성으로 설정해줄 수 있다.
rollbackFor = “java.exception.BusinessRuntimeException”
라는 조건은 BusinessRuntimeException2
나 BusinessRuntimeException$BusinessLogicException
과 같은 조건도 rule이라고 판단하여 rollback을 일으킨다. 따라서 세부적인 설정이 필요한 경우 최대한 자세하게 rule에 포함시킬 예외 상황을 설정하는 것이 좋다.