springboot项目配置双数据源

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")



你可能感兴趣的:(springboot项目配置双数据源)