我使用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;
}