具有多个数据源的spring批处理,需要默认的transactionManager bean

时间:2018-03-08 20:16:11

标签: java spring jpa spring-batch

我使用spring批处理从一个db读取并加载到另一个db。如果我将主要的事务管理器命名为“transactionManager”,那么我会收到以下错误:

  

引起:java.lang.IllegalStateException:已经是值   [org.springframework.jdbc.datasource.ConnectionHolder@355c94be] for   键   [org.springframework.jdbc.datasource.DriverManagerDataSource@2c532cd8]   绑定线程[main]

为了解决这个问题,我必须将主数据库配置命名为“transactionManager”。有没有办法使用我想要的名字?

首先做配置:

@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "db1EntityManager",
        transactionManagerRef = "db1TransactionManager",
        basePackages = {"com.foo.bar.car.repository.db1"})
    public class Db1Config {
       .
       .
       .

        @Primary
        @Bean
        public PlatformTransactionManager db1TransactionManager() {

            JpaTransactionManager transactionManager = new JpaTransactionManager();
            transactionManager.setEntityManagerFactory(db1EntityManager().getObject());
            return transactionManager;
        }

第二次db配置

@Configuration
@EnableJpaRepositories(
        entityManagerFactoryRef = "db2EntityManager",
        transactionManagerRef = "db2TransactionManager",
        basePackages = {"com.foo.bar.car.repository.db2"})
    public class Db2Config {
       .
       .
       .
    // no primary annotation
        @Bean
        public PlatformTransactionManager db2TransactionManager() {

            JpaTransactionManager transactionManager = new JpaTransactionManager();
            transactionManager.setEntityManagerFactory(db2EntityManager().getObject());
            return transactionManager;
        }

0 个答案:

没有答案