@EnableTransactionManagement
은 XML의 <tx:annotation-driven/>
와 동일한 컨테이너 인프라 Bean
을 등록해주는 자바 코드 설정용 어노테이션이다.
스프링에서 Java Config 파일에서 트랜잭션을 활성화할 때 사용하는 어노테이션이다.
Java Config에서 사용할 트랜잭션 매니져를 설정하는 여러 가지 방법이 있다.
우선, Java Config안에서 등록된 PlatformTransactionManager 타입의 Bean
을 등록하면, 그 중 하나를 TransactionManagement로 사용하게 된다.
@Configuration
@EnableTransactionManagement
public class DbConfig {
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/testDb?useUnicode=true&characterEncoding=utf8");
dataSource.setUsername("test");
dataSource.setPassword("test123!@#");
return dataSource;
}
}
다음으로, 트랜잭션 매니져가 두 개 이상 등록되어 있어서 어느 트랜잭션 매니져 Bean
을 사용할지 명시적으로 지정하고 싶다면 TransactionManagementConfigurer
인터페이스를 구현하면 된다.(물론 @Primary 어노테이션을 이용해 우선적으로 등록할 트랜잭션 매니져 Bean
을 지정할 수 도 있다.)
@Configuration
@EnableTransactionManagement
public class DbConfig implements TransactionManagementConfigurer {
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/testDb?useUnicode=true&characterEncoding=utf8");
dataSource.setUsername("test");
dataSource.setPassword("test123!@#");
return dataSource;
}
@Override
public TransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}