二、spring-boot-druid(multi databa

2018-08-01  本文已影响0人  喝咖啡的蚂蚁

上文已经配置了单个数据源,本文将介绍使用druid配置多数据源,废话不多说,下面直接贴代码
项目地址:https://gitee.com/eaco/yi-spring-boot-study

  1. pom文件不做赘述,直接参考上一篇 https://www.jianshu.com/p/835994b78667
  2. 配置application.properties
#数据源1
spring.datasource.druid.one.url=jdbc:mysql://localhost:3306/test1?useunicode=true&characterencoding=utf8&serverTimezone=UTC
spring.datasource.druid.one.username=root
spring.datasource.druid.one.password=root

#数据源2
spring.datasource.druid.two.url=jdbc:mysql://localhost:3306/test2?useunicode=true&characterencoding=utf8&serverTimezone=UTC
spring.datasource.druid.two.username=root
spring.datasource.druid.two.password=root


## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
#注意:一定要对应mapper映射xml文件的所在路径
mybatis.mapper-locations: classpath*:cn/yi/springboot/druid/**/mapper/*.xml
# 注意:对应实体类的路径
mybatis.type-aliases-package:cn.yi.springboot.druid.*.dto
  1. 配置两个包路径的扫描,每个数据源对应一个,用于区分
    特别需要注意:配置第一个数据源,当存在多个数据源时,需要使用@Primary指定其中一个数据源Bean的优先级,但不可两个都使用Primary否则,启动会报两个Bean的异常,因为Spring容器不知道会加载哪一个。
/**
 * 配置第一个数据源,当存在多个数据源时,需要指定其中一个数据源Bean的优先级,但不可两个都使用Primary
 * @author: yiz
 * @date: 2018/8/1 14:35
 **/
@Configuration
@MapperScan(basePackages = "cn.yi.springboot.druid.one.mapper",sqlSessionFactoryRef = "oneSqlSessionFactory")
public class DruidOneConfig {
    /**
    * 多数据源时,第一个数据源指定Primary
     */
    @Primary
    @Bean("dataSourceOne")
    @ConfigurationProperties("spring.datasource.druid.one")
    public DataSource dataSourceOne(){
        return DruidDataSourceBuilder.create().build();
    }

    @Bean(name = "oneSqlSessionFactory")
    @Primary
    public SqlSessionFactory setSqlSessionFactory(@Qualifier("dataSourceOne") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }
}
/**
 * 配置第一个数据源,当存在多个数据源时,需要指定其中一个数据源Bean的优先级,但不可两个都使用Primary
 * @author: yiz
 * @date: 2018/8/1 14:35
 **/
@Configuration
@MapperScan(basePackages = "cn.yi.springboot.druid.two.mapper",sqlSessionFactoryRef = "twoSqlSessionFactory")
public class DruidTwoConfig {
    /**
     * 多数据源时,第二个数据源不要使用Primary
     * @return
     */
    @Bean("dataSourceTwo")
    @ConfigurationProperties("spring.datasource.druid.two")
    public DataSource dataSourceTwo(){
        return DruidDataSourceBuilder.create().build();
    }


    @Bean(name = "twoSqlSessionFactory")
    public SqlSessionFactory setSqlSessionFactory(@Qualifier("dataSourceTwo") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        return bean.getObject();
    }

}

将两个数据源的包和sqlSessionFactory配置完毕,至此,已经完成了数据源的配置啦,是不是很简单啦~
ok,接下来就是直接应用,写两个包来查询对应不同的数据库,包结构如下:


one,two包分别对应one,two数据源

编写完毕启动引用调试一把,看看行不行~
看到启动日志:

2018-08-01 18:07:04.317  INFO 4388 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-1} inited
2018-08-01 18:07:04.959  INFO 4388 --- [           main] com.alibaba.druid.pool.DruidDataSource   : {dataSource-2} inited

加载到了两个数据源,ok了。

更多的内容可以上网搜索了。

上一篇下一篇

猜你喜欢

热点阅读