springboot项目配置双数据源,不适用于jpa2.0
这是用来配置默认数据源
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = “appEntityManagerFactory”,
transactionManagerRef = “appTransactionManager”,
basePackages = {“com.energy.greentoken.common.app.*”} //扫描实体类所在的位置
)
public class AppConfig {
@Autowired
private JpaProperties jpaProperties;
@Bean(name = "appDataSource")
@Primary
@ConfigurationProperties(prefix = "spring.datasource") //从yml文件中找到数据库的相关连接信息
public DataSource appDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "appEntityManagerFactory")
@Primary //表明是默认数据源
public LocalContainerEntityManagerFactoryBean miniEntityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("appDataSource") DataSource appDataSource) {
return builder
.dataSource(appDataSource)
.packages("com.energy.greentoken.common.app.*")
.properties(jpaProperties.getHibernateProperties(appDataSource))
.persistenceUnit("app")
.build();
}
@Bean(name = "appTransactionManager")
@Primary
public PlatformTransactionManager otherTransactionManager(
@Qualifier("appEntityManagerFactory") EntityManagerFactory miniEntityManagerFactory) {
return new JpaTransactionManager(miniEntityManagerFactory);
}
}
这是配置第二数据源
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = “miniEntityManagerFactory”,
transactionManagerRef = “miniTransactionManager”,
basePackages = {“com.energy.greentoken.common.minidecoration.dao”}
)
public class MiniConfig {
@Autowired
private JpaProperties jpaProperties;
@Bean(name = "miniDataSource")
@ConfigurationProperties(prefix = "mini.datasource")
public DataSource otherDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "miniEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean miniEntityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("miniDataSource") DataSource miniDataSource) {
return builder
.dataSource(miniDataSource)
.packages("com.energy.greentoken.common.minidecoration.entity")
.properties(jpaProperties.getHibernateProperties(miniDataSource))
.persistenceUnit("mini")
.build();
}
@Bean(name = "miniTransactionManager")
public PlatformTransactionManager otherTransactionManager(
@Qualifier("miniEntityManagerFactory") EntityManagerFactory miniEntityManagerFactory) {
return new JpaTransactionManager(miniEntityManagerFactory);
}
}
需要在启动类上加入@EnableBatchProcessing和@SpringBootApplication(scanBasePackageClasses = DefaultBatchConfigurer.class)注解
另外springboot配置双数据源的时候,系统事物默认会采用默认的数据源,所以如果是第二数据源的话,需要在异常回滚上指定自己的事物。
@Transactional(rollbackFor = Exception.class, value = "miniTransactionManager")