소스 코드 파일 또는 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.annotationRuntimeException 또는 Error가 발생했을 경우 rollback 된다.rollbackFor/noRollbackFor and rollbackForClassName/noRollbackForClassName, 속성으로 설정해줄 수 있다.
rollbackFor = “java.exception.BusinessRuntimeException” 라는 조건은 BusinessRuntimeException2 나 BusinessRuntimeException$BusinessLogicException 과 같은 조건도 rule이라고 판단하여 rollback을 일으킨다. 따라서 세부적인 설정이 필요한 경우 최대한 자세하게 rule에 포함시킬 예외 상황을 설정하는 것이 좋다.