集成Spring-boot,Spring-batch,Spring-data-jpa进行事务管理的问题

时间:2014-08-14 08:14:04

标签: spring-batch spring-data-jpa spring-boot

我面临与交易管理相关的问题(特别是需要新的交易注释),具体如下:

  
      
  1. 我使用过Spring-boot(1.1.5.RELEASE)   一个。弹簧引导启动批量
      湾弹簧引导起动数据JPA
  2.   
  3. 同样为此我使用了hibernate最新版本
  4.   

我的jpa配置相关代码如下:

@Configuration
@ComponentScan
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "xyz.persistence.repository")
public class JpaConfig {

    @Bean
    public JpaVendorAdapter jpaVendorAdapter() {
        HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
        hibernateJpaVendorAdapter.setShowSql(false);
        hibernateJpaVendorAdapter.setGenerateDdl(false);
        hibernateJpaVendorAdapter.setDatabase(Database.MYSQL);
        return hibernateJpaVendorAdapter;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter) {
        LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
        lef.setDataSource(dataSource);
        lef.setJpaVendorAdapter(jpaVendorAdapter);
        lef.setPackagesToScan("xyz.persistence.domain");
        return lef;
    }

    @Bean
    public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}

但在执行期间,我面临与交易管理相关的问题。

我在这个问题上挖了北斗,发现了下面列出的事件顺序:

  
      
  1. Spring-boot会按预期加载我的事务管理器
  2.   
  3. 然而,在此之后,spring-boot加载spring-batch,从而加载SimpleBatchConfiguration。
  4.   
  5. 由于SimpleBatchConfiguration也有事务管理器的定义(没有@ConditionalOnMissingBean),它会覆盖我的   事务管理
  6.   
  7. 现在轮到spring-data-jpa,即JpaBaseConfiguration。这和transactionManager的定义几乎相似   我在jpaconfig中定义的内容。但这并不会超越   早期的定义为@ConditionalOnMissingBean。
  8.   

因此,在所有初始化之后,我留下了Spring-batch注入的transactionmanager,导致事务管理器无法正常工作。

  

PS:这是使用spring-boot 0.5.0.m6(因为   JpaBaseConfiguration中没有@ConditionalOnMissingBean)**

我试图排除SimpleBatchConfiguration,但这也无效。

非常感谢任何帮助。

阿沛

0 个答案:

没有答案