美文网首页
多数据源配置

多数据源配置

作者: 超级笔记本 | 来源:发表于2019-09-30 13:33 被阅读0次

1、配置文件中添加数据库连接配置

spring:
  profiles: dev
  datasource:
    primary:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://localhost:3306/my_system?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
      username: root
      password: 123456
    side:
      driver-class-name: com.mysql.cj.jdbc.Driver
      jdbc-url: jdbc:mysql://localhost:3306/my_system_side?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&serverTimezone=Asia/Shanghai
      username: root
      password: 123456

2、添加配置文件,对应1中定义的主从数据库名称primary、side等

@Configuration
public class DataSourceConfig {

    /***
     * 配置主数据源
     * @return
     */
    @Bean(name = "primaryDataSource")
    @Qualifier("primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }

    /****
     * 配置数据源
     * @return
     */
    @Bean(name = "sideDataSource")
    @Qualifier("sideDataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.side")
    public DataSource sideDataSource() {
        return DataSourceBuilder.create().build();
    }

}

3、分别创建各个数据库的jpa配置。要注意实体类和数据库操作类的路径
Primary

@Configuration
@EnableJpaRepositories(
        basePackages = "com.loit.venus.db.dao.primary",
        entityManagerFactoryRef = "primaryEntityManagerFactoryBean",
        transactionManagerRef = "primaryTransactionManager")
@EnableTransactionManagement
public class PrimaryConfiguration {

    //第一个数据源,可以不加Qualifier
    @Autowired
    @Qualifier("primaryDataSource")
    private DataSource dataSource;

    //jpa其他参数配置
    @Autowired
    private JpaProperties jpaProperties;

    //实体管理工厂builder
    @Autowired
    private EntityManagerFactoryBuilder factoryBuilder;

    /**
     * 配置第一个实体管理工厂的bean
     *
     * @return
     */
    @Bean(name = "primaryEntityManagerFactoryBean")
    @Primary
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
        return factoryBuilder.dataSource(dataSource)
                //这一行的目的是加入jpa的其他配置参数比如(ddl-auto: update等)
                //当然这个参数配置可以在事务配置的时候也可以
                .properties(jpaProperties.getProperties())
                .packages("com.loit.venus.db.model.primary")
                .persistenceUnit("primaryPersistenceUnit")
                .build();
    }

    /**
     * EntityManager不过解释,用过jpa的应该都了解
     *
     * @return
     */
    @Bean(name = "primaryEntityManager")
    @Primary
    public EntityManager entityManager() {
        return entityManagerFactoryBean().getObject().createEntityManager();
    }

    /**
     * jpa事务管理
     *
     * @return
     */
    @Bean(name = "primaryTransactionManager")
    @Primary
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
        return jpaTransactionManager;
    }
}

Side

@Configuration
@EnableJpaRepositories(
        basePackages = "com.loit.venus.db.dao.side",
        entityManagerFactoryRef = "sideEntityManagerFactoryBean",
        transactionManagerRef = "sideTransactionManager")
@EnableTransactionManagement
public class SideConfiguration {

    //第二个数据源,必须加Qualifier
    @Autowired
    @Qualifier("sideDataSource")
    private DataSource dataSource;

    //jpa其他参数配置
    @Autowired
    private JpaProperties jpaProperties;

    //实体管理工厂builder
    @Autowired
    private EntityManagerFactoryBuilder factoryBuilder;

    /**
     * 配置第二个实体管理工厂的bean
     *
     * @return
     */
    @Bean(name = "sideEntityManagerFactoryBean")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
        return factoryBuilder.dataSource(dataSource)
                .properties(jpaProperties.getProperties())
                .packages("com.loit.venus.db.model.side")
                .persistenceUnit("sidePersistenceUnit")
                .build();
    }

    /**
     * EntityManager不过解释,用过jpa的应该都了解
     *
     * @return
     */
    @Bean(name = "sideEntityManager")
    public EntityManager entityManager() {
        return entityManagerFactoryBean().getObject().createEntityManager();
    }

    /**
     * jpa事务管理
     *
     * @return
     */
    @Bean(name = "sideTransactionManager")
    public JpaTransactionManager transactionManager() {
        JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
        jpaTransactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
        return jpaTransactionManager;
    }
}

项目地址

相关文章

网友评论

      本文标题:多数据源配置

      本文链接:https://www.haomeiwen.com/subject/mgbmyctx.html