사용자 도구

사이트 도구


springframework:javaconfig:enabletransactionmanagement

Spring Framework @EnableTransactionManagement

경고 : Spring 4.1.4 미만 버전의 경우 TransactionManagementConfigurer로 기본 Transaction Manager를 지정하면 @Transactional(value=“다른트랜잭션매니저”) 로 명시한 경우에도 무시하고 기본 Transaction Manager를 사용하는 버그가 있다. 우회책으로 @Primary를 사용하면 된다.
[SPR-12541] @Transactional qualifier is ignored by TransactionAspectSupport if default transaction manager is set - Spring JIRA
4.1.4 버전에도 트랜잭션 관련 버그가 존재하기 때문에 4.1.5 이상 버전 사용할 것
  • @Transactional에서 트랜잭션 매니저를 지정하지 않아도 XML 기반은 기본으로 transactionManager를 디폴트 트랜잭션 매니저로 지정하지만 Java Config를 사용할 때는 모든 PlatformTransactionManager 인스턴스를 찾아서 그 중에 하나를 매핑한다.
  • 따라서 특정 트랜잭션 매니저를 디폴트로 지정하고자 한다면 Java Config 클래스가 TransactionManagementConfigurer 인터페이스를 구현하고 annotationDrivenTransactionManager를 구현해서 트랜잭션 매니저를 리턴해주면 해당 매니저를 사용하게 된다.
    @Configuration
    public class TransactionManageConfig implements TransactionManagementConfigurer {
    // 직접 Bean으로 지정
     @Bean
     @Override
     public PlatformTransactionManager annotationDrivenTransactionManager() {
         return new DataSourceTransactionManager(dataSource());
     }
     
    // 다른 빈을 리턴
     @Bean
     public PlatformTransactionManager txManager() {
         return new DataSourceTransactionManager(dataSource());
     }
     
     @Override
     public PlatformTransactionManager annotationDrivenTransactionManager() {
         return txManager(); // reference the existing @Bean method above
     }
    }
  • 아니면 특정 트랜잭션 매니저 생성시 @Primary 애노테이션을 지정한다.
    @Bean
    @Primary
    public ChainedTransactionManager transactionManager() {
        return new SomePlatformTransactionManager();
    }
springframework/javaconfig/enabletransactionmanagement.txt · 마지막으로 수정됨: 2015/10/12 17:05 저자 kwon37xi