【简介】
在实际开发过程中会遇到多数据源的场景,本文主要介绍怎样实现多数据源。
本文只介绍核心的配置,其他的请道友clone项目自行查看
【本文Demo】
https://github.com/qidasheng2012/springboot2.x_ssm/tree/branch-DataSources
【建表】
创建两个数据库分别为:system和server
在system中创建user表,在server中创建product表
建表sql,在项目中已给到,看下图:
【application.yml】
道友可以根据自己的数据库配置进行相应调整
#服务器配置
server:
port: 80
spring:
#数据源
datasource:
# 系统数据源
system:
url: jdbc:mysql://localhost:3306/system?serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: root
password: 123456
configuration:
maximum-pool-size: 10
# 业务数据源
server:
url: jdbc:mysql://localhost:3306/server?serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: root
password: 123456
configuration:
maximum-pool-size: 10
# 日志
logging:
level:
com.springboot.ssm.mapper: debug # 显示执行sql
【config配置】
这块内容是本文的核心所在,请道友仔细查看
注意事项:
- 使用多数据源,其中一个配置类需要添加
@Primary
注解 (有且仅有一个配置类需要添加) - 在配置类中需要配置 dao 层所在的包、 Mapper.xml 所在的路径、别名包路径
原理:
- 通过@MapperScan扫描mapper的包路径
- 配置不同的DataSource
- 根据DataSource生成对应SqlSessionFactory 和DataSourceTransactionManager ,在SqlSessionFactory 中配置mapper.xml的路径和别名包扫描路径,当然还可以配置plugin等等
- 根据SqlSessionFactory 生成SqlSessionTemplate
- SqlSessionTemplate封装了SqlSession,SqlSession就是mapper的相关操作
【DB1Config】
package com.springboot.ssm.config.db;
import com.zaxxer.hikari.HikariDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.