Springboot使用druid配置多数据源

最近在一个需要中需要去连接其他的项目的数据库,本来想使用jbdc直接链接下的,反正就是获取数据,但是想想还是算了,正好springboot数据源配置还没有玩过,那么就正好趁这次机会学习并使用下

至于pom文件需要的依赖自然不必多说。直接从yml文件说起

1 1 spring: 2 2 datasource: 3 3 druid: 4 4 master: 5 5 driver-class-name: com.mysql.cj.jdbc.Driver 6 6 url: jdbc:mysql://xxxx:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false 7 7 username: root 8 8 password: 111111 9 9 slave: 1010 url: jdbc:mysql://yyyy:3306/test?useUnicode=true&characherEncoding=utf-8&useSSL=false 1111 username: root 1212 password: 111111 1313 driver-class-name: com.mysql.cj.jdbc.Driver 1414 db-type: com.alibaba.druid.pool.DruidDataSource 1515 initial-size: 50 1616 min-idle: 50 1717 max-active: 100 1818 max-wait: 60000 1919 time-between-eviction-runs-millis: 60000

注意其中加粗的部分:

master表示主数据源,slave表示从数据源。公共的部分可以直接写在druid节点下面。下面需要注意的时候针对不同的数据源需要有不同的配置文件

主数据源的配置类

1 1 package com.test; 2 2 3 3 import com.alibaba.druid.pool.DruidDataSource; 4 4 import org.apache.ibatis.session.SqlSessionFactory; 5 5 import org.mybatis.spring.SqlSessionFactoryBean; 6 6 import org.mybatis.spring.annotation.MapperScan; 7 7 import org.springframework.beans.factory.annotation.Autowired; 8 8 import org.springframework.beans.factory.annotation.Value; 9 9 import org.springframework.context.annotation.Bean; 1010 import org.springframework.context.annotation.Configuration; 1111 import org.springframework.context.annotation.Primary; 1212 import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 1313 import org.springframework.jdbc.datasource.DataSourceTransactionManager; 1414 1515 import javax.sql.DataSource; 1616 1717 @Configuration 1818 // 扫描 Mapper 接口并容器管理 1919 @MapperScan(basePackages = MasterDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "masterSqlSessionFactory") 2020 public class MasterDataSourceConfig { 2121 2222 //mapper接口文件存放的目录 精确到 master 目录,以便跟其他数据源隔离 2323 static final String PACKAGE = "com.test.mapper.master"; 2424 static final String MAPPER_LOCATION = "classpath:mapper/master/*.xml"; 2525 2626 @Value("${spring.datasource.druid.master.url}") 2727 private String url; 2828 2929 @Value("${spring.datasource.druid.master.username}") 3030 private String user; 3131 3232 @Value("${spring.datasource.druid.master.password}") 3333 private String password; 3434 3535 @Value("${spring.datasource.druid.master.driver-class-name}") 3636 private String driverClass; 3737 3838 /** 3939 * 默认数据源 4040 * @return 4141 */ 4243 @Bean 4344 @Primary 4445 public DataSource masterDataSource() { 4546 DruidDataSource dataSource = new DruidDataSource(); 4647 dataSource.setDriverClassName(driverClass); 4748 dataSource.setUrl(url); 4849 dataSource.setUsername(user); 4950 dataSource.setPassword(password); 5051 return dataSource; 5152 } 5253 5354 //@Bean(name = "masterTransactionManager") 5455 @Bean 5556 @Primary 5657 public DataSourceTransactionManager masterTransactionManager() { 5758 return new DataSourceTransactionManager(masterDataSource()); 5859 } 5960 6061 6162 @Bean 6263 @Primary 6364 public SqlSessionFactory masterSqlSessionFactory(@Autowired DataSource masterDataSource) 6465 throws Exception { 6566 final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 6667 sessionFactory.setDataSource(masterDataSource); 6768 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() 6869 .getResources(MasterDataSourceConfig.MAPPER_LOCATION)); 6970 return sessionFactory.getObject(); 7071 } 7172 }

从数据源的配置类

1 1 package com.test; 2 2 3 3 import com.alibaba.druid.pool.DruidDataSource; 4 4 import org.apache.ibatis.session.SqlSessionFactory; 5 5 import org.mybatis.spring.SqlSessionFactoryBean; 6 6 import org.mybatis.spring.annotation.MapperScan; 7 7 import org.springframework.beans.factory.annotation.Autowired; 8 8 import org.springframework.beans.factory.annotation.Value; 9 9 import org.springframework.context.annotation.Bean; 1010 import org.springframework.context.annotation.Configuration; 1111 import org.springframework.core.io.support.PathMatchingResourcePatternResolver; 1212 import org.springframework.jdbc.datasource.DataSourceTransactionManager; 1313 1414 import javax.sql.DataSource; 1515 1616 1717 @Configuration 1818 // 扫描 Mapper 接口并容器管理 1919 @MapperScan(basePackages = SlaveDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "slaveSqlSessionFactory") 2020 public class SlaveDataSourceConfig { 2121 2222 //mapper接口文件的存放目录 精确到 slave目录,以便跟其他数据源隔离 2323 static final String PACKAGE = "com.test.mapper.slave"; 2424 static final String MAPPER_LOCATION = "classpath:mapper/slave/*.xml"; 2525 2626 @Value("${spring.datasource.druid.slave.url}") 2727 private String url; 2828 2929 @Value("${spring.datasource.druid.slave.username}") 3030 private String user; 3131 3232 @Value("${spring.datasource.druid.slave.password}") 3333 private String password; 3434 3535 @Value("${spring.datasource.druid.slave.driver-class-name}") 3636 private String driverClass; 3737 3838 3939 @Bean 4040 public DataSource slaveDataSource() { 4141 DruidDataSource dataSource = new DruidDataSource(); 4242 dataSource.setDriverClassName(driverClass); 4343 dataSource.setUrl(url); 4444 dataSource.setUsername(user); 4545 dataSource.setPassword(password); 4646 return dataSource; 4747 } 4848 4949 5050 @Bean 5151 public DataSourceTransactionManager slaveTransactionManager() { 5252 return new DataSourceTransactionManager(slaveDataSource()); 5353 } 5454 5555 5656 @Bean 5757 public SqlSessionFactory slaveSqlSessionFactory(@Autowired DataSource slaveDataSource) 5858 throws Exception { 5959 final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 6060 sessionFactory.setDataSource(slaveDataSource); 6161 sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver() 6262 .getResources(SlaveDataSourceConfig.MAPPER_LOCATION)); 6363 return sessionFactory.getObject(); 6464 } 6565 }

总结:上面的配置类的位置是随便放的,方式MappSacan的位置需要注意,数据源扫描哪个mapper目录。那么该mapper目录就默认使用当前是数据源

参考链接:https://zhuanlan.zhihu.com/p/31575567

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )