上文已经配置了单个数据源,本文将介绍使用druid配置多数据源,废话不多说,下面直接贴代码
项目地址:https://gitee.com/eaco/yi-spring-boot-study
- pom文件不做赘述,直接参考上一篇 https://www.jianshu.com/p/835994b78667
- 配置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
- 配置两个包路径的扫描,每个数据源对应一个,用于区分
特别需要注意:配置第一个数据源,当存在多个数据源时,需要使用@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了。
更多的内容可以上网搜索了。
网友评论