-
Demo 結構及源碼
- Demo結構圖
- 源碼鏈接: https://download.csdn.net/download/weixin_44187730/12026906
- Demo結構圖
-
pom.xml添加依賴
<dependencies>
<!-- Swagger2 接口文檔 -->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.1.RELEASE</version>
</dependency>
<!-- Druid相關 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--Mybatis Plus相關【核心包、逆向工程、模板引擎、多數據源】-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.5.7</version>
</dependency>
<!--actuator 監控-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
-
MybatisPlus整合
- MP整合: https://blog.csdn.net/weixin_44187730/article/details/101620137
-
Druid多數據源配置application-druid.yml
#Druid多數據源配置信息
spring:
autoconfigure:
exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
#啓動執行SQL腳本 ALWAYS:每次初始化 NEVER:不初始化 EMBEDDED:僅初始化一次
initialization-mode: EMBEDDED
schema:
- classpath:sql/master_db.sql
- classpath:sql/slave_db.sql
type: com.alibaba.druid.pool.DruidDataSource
dynamic:
#指定默認鏈接的 數據源
primary: master
datasource:
#指定多個數據源鏈接信息 名稱可自己指定
master:
url: jdbc:mysql://127.0.0.1:3306/master_db?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
username: root
password: admin
driver-class-name: com.mysql.jdbc.Driver
slave:
url: jdbc:mysql://127.0.0.1:3306/slave_db?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false
username: root
password: admin
driver-class-name: com.mysql.jdbc.Driver
druid:
#初始化大小
initial-size: 5
min-idle: 5
max-active: 20
#等待超時時間
max-wait: 60000
#心跳檢測
time-between-eviction-runs-millis: 60000
#配置連接在池的最小時間
min-evictable-idle-time-millis: 300000
validation-query: SELCET 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
#打開PSCache
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
#配置監控統計連接的filters,去掉後監控sql無法統計
filters: stat,wall,slf4j
connection-properties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
#配置DruidStatFilter
web-stat-filter:
enabled: true
url-pattern: "/*"
exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
#配置DruidStatViewServlet
stat-view-servlet:
url-pattern: "/druid/*"
#IP白名單
allow: 127.0.0.1,192.168.44.*
#IP黑名單
deny: 192.168.15.85
reset-enable: false
# druid監控臺登錄用戶密碼
login-username: admin
login-password: 123456
- 啓用相關配置application.yml
#端口配置
server:
port: 9088
servlet:
context-path: /
spring:
application:
name: boot-druid-mp-dynamic-db
profiles:
active: mp,druid
- 編寫測試方法
- 在需要切換數據源的地方加上@DS(“數據源名稱”)
@Service
public class UsersServiceImpl extends ServiceImpl<UsersMapper, Users> implements UsersService {
@DS("master")
@Override
public List<Users> getAllUserFromMaster() {
return this.baseMapper.selectList(null);
}
@DS("slave")
@Override
public List<Users> getAllUserFromSlave() {
return this.baseMapper.selectList(null);
}
}
- 編寫測試接口
@RestController
@RequestMapping("/us")
public class UsersController {
@Autowired
UsersService usersService;
@GetMapping("/getAllUserFromMaster")
public Object getAllUserFromMaster() {
return usersService.getAllUserFromMaster();
}
@GetMapping("/getAllUserFromSlave")
public Object getAllUserFromSlave() {
return usersService.getAllUserFromSlave();
}
}
- 測試數據源切換