說明:
- 1. 本文是本地運行了兩個mysql服務,可參考我上一篇文章配置(不同ip同理)
-
windows mysql8:(超詳細)同ip運行兩個mysql服務
- 2. 數據庫的主從同步,可參考我的另一篇文章
-
Windows mysql8:(超詳細)主從數據與結構同步配置
開始:
-
使用開源中國發布的優秀框架 SpringBoot 多數據源快速啓動器 dynamic-datasource
- 本文只簡單使用,詳細請點擊上方鏈接查看文檔
- 本文環境:
- springboot 2.1.2.RELEASE
- mysql 8.0.15
- mybatisplus 2.3.3
- druid 1.1.10
1. maven導入jar包
<!--主從配置依賴-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.2</version>
</dependency>
2. application.yml中配置,替換掉原來的druid配置,下圖配置中,改爲你自己的主從庫的url,用戶名,密碼
spring:
# 數據源
datasource:
dynamic:
primary: master
datasource:
master:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/xboot?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false
druid: #以下均爲默認值
initial-size: 3
max-active: 8
min-idle: 2
max-wait: -1
min-evictable-idle-time-millis: 30000
max-evictable-idle-time-millis: 30000
time-between-eviction-runs-millis: 0
validation-query: select 1
validation-query-timeout: -1
test-on-borrow: false
test-on-return: false
test-while-idle: true
pool-prepared-statements: true
max-open-prepared-statements: 100
filters: stat,wall
share-prepared-statements: true
slave:
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3307/xboot?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false
druid: #以下均爲默認值
initial-size: 3
max-active: 8
min-idle: 2
max-wait: -1
min-evictable-idle-time-millis: 30000
max-evictable-idle-time-millis: 30000
time-between-eviction-runs-millis: 0
validation-query: select 1
validation-query-timeout: -1
test-on-borrow: false
test-on-return: false
test-while-idle: true
pool-prepared-statements: true
max-open-prepared-statements: 100
filters: stat,wall
share-prepared-statements: true
3. 在啓動類@SpringBootApplication註解中,添加排除原生Druid的配置類。如下:
DruidDataSourceAutoConfigure會注入一個DataSourceWrapper,其會在原生的spring.datasource下找url,username,password等。而我們動態數據源的配置路徑是變化的。
@SpringBootApplication(exclude = DruidDataSourceAutoConfigure.class)
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4. 上面三步,已配置好讀寫分離,下面使用註解即可選擇使用主從庫
@DS("slave_1") 括號內即是yml中配置的數據源名稱,不加註解默認是訪問主庫master,可加在service方法上,也可加在mapper方法上。
下圖示例,是用在service方法
/**
* @Description: 查出所有是審批人的員工
* @auther: Hanweihu
* @date: 8:10 2019/4/16
* @param: [pageVo]
* @return: com.baomidou.mybatisplus.plugins.Page
*/
@DS("slave_1")
public Page selectAudit(PageVo pageVo) {
Wrapper<Staff> entity = new EntityWrapper<Staff>();
entity.eq("is_audit","1");
entity.eq("IS_DELETE","0");
Page<Staff> page = new Page<>(pageVo.getPageNumber(), pageVo.getPageSize());
List<Staff> staffList = staffMapper.selectPage(page, entity);
return page.setRecords(staffList);
}