Spring Transaction

raccoonback·2020년 7월 17일
1

boost course

목록 보기
10/10
post-thumbnail

@EnableTransactionManagement

@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());
    }
}
profile
한번도 실수하지 않은 사람은, 한번도 새로운 것을 시도하지 않은 사람이다.

0개의 댓글