Spring batch 为事务管理集成Spring引导、Spring批处理、Spring数据jpa的问题

Spring batch 为事务管理集成Spring引导、Spring批处理、Spring数据jpa的问题,spring-batch,spring-data-jpa,spring-boot,Spring Batch,Spring Data Jpa,Spring Boot,我面临与事务管理(特别是需要新的事务注释)相关的问题,详情如下: 我使用了带有 A.弹簧靴启动器批次 Bspring引导启动器数据jpa 为此,我还使用了hibernate最新版本 我的jpa配置相关代码如下所示: @Configuration @ComponentScan @EnableTransactionManagement @EnableJpaRepositories(basePackages = "xyz.persistence.repository") public class Jp

我面临与事务管理(特别是需要新的事务注释)相关的问题,详情如下:

  • 我使用了带有
    A.弹簧靴启动器批次
    Bspring引导启动器数据jpa
  • 为此,我还使用了hibernate最新版本
  • 我的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);
        }
    
    }
    
    但在执行过程中,我面临着与事务管理相关的问题

    我在这个问题中挖掘了北斗七星,发现了如下所列的事件序列:

    @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);
        }
    
    }
    
  • Spring boot确实按预期加载了我的事务管理器
  • 但是,在相同的操作之后,spring boot将加载spring批处理,从而加载SimpleBatchConfiguration
  • 由于SimpleBatchConfiguration还具有事务管理器的定义(不带@ConditionalOnMissingBean),因此它会覆盖我的 交易经理
  • 现在轮到spring数据jpa,即JpaBaseConfiguration。这也是transactionManager的定义,它与 我在JPA图中定义的内容。但这并不意味着什么 前面的定义是@ConditionalOnMissingBean
  • 因此,在所有初始化之后,剩下的transactionmanager由SpringBatch注入,这导致transactionmanager无法正常工作

    PS:这与弹簧靴0.5.0.m6配合使用(自 @(JpaBaseConfiguration中不存在ConditionalOnMissingBean)**

    我试图排除SimpleBatchConfiguration,但这也不起作用

    任何帮助都将不胜感激


    Abhay

    您是否尝试放弃手动配置并选择了
    @EnableAutoConfiguration
    ?我也面临同样的问题,对此有何解决方案?