springboot(2.0)jpa 多数据源配置

jpa 多数据源配置

github网址jpa多数据源配置
项目名:springboot-jpa-mulidata

注意事项:

  1. 重点:多数据源配置时,要指定一个数据源为主数据源并使用@Primary注解
  2. @EnableJpaRepositories(basePackages)配置repository

1.项目结构和配置流程

1.1配置流程

  1. 生成实体类
  2. 创建Repository类并继承
  3. 配置application.properties
  4. 配置dataSourceconfig
  5. 配置多数据源

2.配置说明

application.properties配置

test1.spring.datasource.driver-class-name = com.mysql.jdbc.Driver
#多数据源时,为jdbc-url
test1.spring.datasource.jdbc-url = jdbc:mysql://localhost:3306/test1?useUnicode=true&characterEncoding=utf-8&useSSL=false
test1.spring.datasource.username = root
test1.spring.datasource.password = 0806


test2.spring.datasource.driver-Class-Name = com.mysql.jdbc.Driver
#多数据源时,为jdbc-url
test2.spring.datasource.jdbc-url = jdbc:mysql://localhost:3306/test2?useUnicode=true&characterEncoding=utf-8&useSSL=false
test2.spring.datasource.username = root
test2.spring.datasource.password = 0806

# 第一次简表create  后面用update
spring.jpa.hibernate.ddl-auto= update
spring.jpa.show-sql= true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

多数据源1配置

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef="entityManagerFactoryTest1",
        transactionManagerRef="transactionManagerTest1",
        basePackages= { "com.plumblum.repository.Test1" })
public class RepositoryConfigTest1 {
    /**
     *
     */
    @Autowired
    private JpaProperties jpaProperties;

    @Autowired
    @Qualifier("test1DS")
    private DataSource test1DS;

    @Bean(name = "entityManagerTest1")
    @Primary
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactoryTest1(builder).getObject().createEntityManager();
    }

    @Bean(name = "entityManagerFactoryTest1")
    @Primary
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryTest1 (EntityManagerFactoryBuilder builder) {
        return builder
                //设置数据源
                .dataSource(test1DS)
                //设置数据源属性
                .properties(getVendorProperties())
                //设置实体类所在位置.扫描所有带有 @Entity 注解的类
                .packages("com.plumblum.entity")
                // Spring会将EntityManagerFactory注入到Repository之中.有了 EntityManagerFactory之后,
                // Repository就能用它来创建 EntityManager 了,然后Entity就可以针对数据库执行操作
                .persistenceUnit("test1PersistenceUnit")
                .build();

    }


    private Map<String, Object> getVendorProperties() {
        return jpaProperties.getHibernateProperties(new HibernateSettings());
    }

    @Bean(name = "transactionManagerTest1")
    @Primary
    PlatformTransactionManager transactionManagerTest1(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactoryTest1(builder).getObject());
    }

}

多数据源2配置

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef="entityManagerFactoryTest2",
        transactionManagerRef="transactionManagerTest2",
        basePackages= { "com.plumblum.repository.Test2" })
public class RepositoryConfigTest2 {
    @Autowired
    private JpaProperties jpaProperties;

    @Autowired
    @Qualifier("test2DS")
    private DataSource test2DS;

    @Bean(name = "entityManagerTest2")
//    @Primary
    public EntityManager entityManager(EntityManagerFactoryBuilder builder) {
        return entityManagerFactoryTest2(builder).getObject().createEntityManager();
    }

    @Bean(name = "entityManagerFactoryTest2")
//    @Primary
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryTest2 (EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(test2DS)
                .properties(getVendorProperties())
                .packages("com.plumblum.entity") //设置实体类所在位置
                .persistenceUnit("test2PersistenceUnit")
                .build();
    }

    private Map<String, Object> getVendorProperties() {
        return jpaProperties.getHibernateProperties(new HibernateSettings());
    }

    @Bean(name = "transactionManagerTest2")
//    @Primary
    PlatformTransactionManager transactionManagerPrimary(EntityManagerFactoryBuilder builder) {
        return new JpaTransactionManager(entityManagerFactoryTest2(builder).getObject());
    }

}

dataSource配置

@Configuration
public class DataSourceConfig {

    @Bean(name = "test1DS")
    @Qualifier("test1DS")
//  设置主数据库
    @Primary
    @ConfigurationProperties(prefix="test1.spring.datasource")
    public DataSource test1DataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "test2DS")
    @Qualifier("test2DS")
    @ConfigurationProperties(prefix="test2.spring.datasource")
    public DataSource test2DataSource(){
        return DataSourceBuilder.create().build();
    }



}

3测试和结果展示

测试方法
这里写图片描述
测试结果
这里写图片描述
这里写图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值