核心依賴
<!--mybatis-plus 核心組件-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3</version>
</dependency>
<!--mybatis-plus多數據源開發-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<!--mysql驅動-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
</project>
數據庫連接明文加密
1.生成秘鑰
2.生成密文
3.密文填寫配置文件
@Test
public void testJiaMi(){
//生成秘鑰
String randomKey = AES.generateRandomKey();
String data2 = "jdbc:mysql://localhost:3306/study03?useSSL=false&serverTimezone=UTC";
// 隨機密鑰加密
String result = AES.encrypt(data2, randomKey);
System.out.println(randomKey+"||"+result);
}
秘鑰 在啟動參數 (Program arguments) --mpw.key=4b57e89bac82a797
類似如下填寫
datasource:
driver-class-name: com.mysql.jdbc.Driver
url:mpw:dNjT0C8R2vh972whSGklO69WmcQZH494voJk38q/JmdnswjmjMJpyyQvGii+YmLe
username: mpw:3IAJ/lzGvlG5+CSXhe2S2g==
password: mpw:3IAJ/lzGvlG5+CSXhe2S2g==
多數據源配置
server:
port: 8082
spring:
profiles:
active: prod
datasource: #使用了mybatis-plus的加密,密匙傳遞在啟動參數
#mybatis-plus多數據源框架
dynamic:
primary: master #設置默認的數據源或者數據源組,默認值即為master
strict: false #嚴格匹配數據源,默認false. true未匹配到指定數據源時拋異常,false使用默認數據源
datasource:
master:
driver-class-name: com.mysql.jdbc.Driver
url: mpw:dNjT0C8R2vh972whSGklO69WmcQZH494voJk38q/Jmfr7P7L5i6A9aReXemBPXCB6125DwN+5EYRTy/oNOA4AXe2/1XDMnOuQPXNVCJ2C4k=
username: mpw:3IAJ/lzGvlG5+CSXhe2S2g==
password: mpw:3IAJ/lzGvlG5+CSXhe2S2g==
slave_1:
url: mpw:dNjT0C8R2vh972whSGklOyqz7hR9ntRUU58MOiSftOelxMKOCB2rquB+qAZ5KF8IJAV7bVvXjNKSt6qpsnKaV6nz6jV0A27NhwchZZroWgQ=
username: mpw:3IAJ/lzGvlG5+CSXhe2S2g==
password: mpw:3IAJ/lzGvlG5+CSXhe2S2g==
driver-class-name: com.mysql.jdbc.Driver
slave_2:
url: mpw:dNjT0C8R2vh972whSGklO69WmcQZH494voJk38q/JmfDVhJi8IkUYln5KNoyZqSOKZXC0FiZKBGg46AYzRk1lRv6ZdJdSRi/hSoxPoph5VI=
username: mpw:3IAJ/lzGvlG5+CSXhe2S2g==
password: mpw:3IAJ/lzGvlG5+CSXhe2S2g==
driver-class-name: com.mysql.jdbc.Driver
mybatis-plus:
type-aliases-package: com.example.entity #實體類別名
mapper-locations: classpath:mapper/*.xml # 掃描的xml
configuration:
map-underscore-to-camel-case: true #開啟駝峰命名
cache-enabled: false
check-config-location: true # 檢查xml是否存在
type-enums-package: com.example.enumpackage #通用枚舉開啟
使用切換數據源
package com.example.controller;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* @description: mybatisPlus多數據源
* @author: GuoTong
* @createTime: 2021-08-21 22:53
* @since JDK 1.8 OR 11
**/
@RestController
public class MoreDataSource {
@Autowired
private JdbcTemplate jdbcTemplate;
@RequestMapping("/datasource01")
@DS("master")
public Object datasource01() {
List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from user");
return list;
}
@RequestMapping("/datasource02")
@DS("slave_1")
public Object datasource02() {
List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from user");
return list;
}
@RequestMapping("/datasource03")
@DS("slave_2")
public Object datasource03() {
List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from user");
return list;
}
}
效果
http://localhost:8082/datasource01
http://localhost:8082/datasource02
http://localhost:8082/datasource03