美文网首页
二、spring-boot-druid(multi databa

二、spring-boot-druid(multi databa

作者: 喝咖啡的蚂蚁 | 来源:发表于2018-08-01 18:11 被阅读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容器不知道会加载哪一个。
    • @Primary的意思是:当有多个相同的事例时,优先使用使用了@Primary的那个事例。
    • DruidOneConfig.java 配置第一个数据源
    /**
     * 配置第一个数据源,当存在多个数据源时,需要指定其中一个数据源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();
        }
    }
    
    • DruidTwoConfig 配置第二个数据源
    /**
     * 配置第一个数据源,当存在多个数据源时,需要指定其中一个数据源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了。

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

    相关文章

      网友评论

          本文标题:二、spring-boot-druid(multi databa

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