一、多數據源集成簡介
多數據源集成使用
dynamic-sring-boot-starter,github地址:https://github.com/baomidou/dynamic-datasource-spring-boot-starter,詳細使用可以參考github地址。
二、BDP框架集成多數據源步驟
- 1、pom.xm文件引入dynamic-datasource-spring-boot-starter maven依賴。maven依賴配置如下
<!-- https://mvnrepository.com/artifact/com.baomidou/dynamic-datasource-spring-boot-starter --> <!--動態數據源配置--> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.2.0</version> </dependency>
- 2、在application.yml,將spring.profiles.active改為system,dynamicDataapplication.yml修改配置可以如下:
spring: profiles: # 切換配置文件 active: system,dynamicData
- 3、在application-dynamicData.yml,設置主數據源、從數據源數據庫配置信息,可以配置多個從數據源。
關鍵配置如下:
spring: datasource: dynamic: druid: #以下是全局默認值,可以全局更改 # 下面為連接池的補充設置,應用到上面所有數據源中 # 初始化大小,最小,最大 initialSize: 1 minIdle: 3 maxActive: 100 # 配置獲取連接等待超時的時間 maxWait: 6000 # 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 timeBetweenEvictionRunsMillis: 1000 # 配置一個連接在池中最小生存的時間,單位是毫秒 minEvictableIdleTimeMillis: 30000 validationQuery: select 'x' FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false # 打開PSCache,並且指定每個連接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置監控統計攔截的filters,去掉后監控界面sql無法統計,'wall'用於防火牆 filters: stat,wall,slf4j # 通過connectProperties屬性來打開mergeSql功能;慢SQL記錄 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 primary: master #設置默認的數據源或者數據源組,默認值即為master strict: true #設置嚴格模式,默認false不啟動. 啟動后在未匹配到指定數據源時候會拋出異常,不啟動則使用默認數據源. datasource: master: url: jdbc:mysql://localhost:3306/dbname1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 username: XXXX password: XXXX driver-class-name: com.mysql.cj.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # strict為false時候,可以不配置從數據源 slave_1: url: jdbc:mysql://localhost:3306/dbname2?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8 username: xxxx password: xxxx driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource # 集成多數據源,需要排除druid默認配置,從動態數據源獲取druid配置 autoconfigure: exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
三、代碼中使用多數據源
- 使用 @DS 切換數據源。@DS 可以注解在方法上或類上,同時存在就近原則 方法上注解 優先於 類上注解。
注解 |
結果 |
沒有@DS |
使用默認數據庫 |
@DS("dbName") |
dbName可以為組名也可以為具體某個庫的名稱 |
代碼使用實例
建議在service層類上或者方法添加@DS("dsName"),可以用來指定數據庫連接那個數據庫。
@RestController @RequestMapping("/dbTest") public class DynamicDatasourceTest { @Autowired private UserServiceImpl userService; @GetMapping("/list") public ResponseResult<List<SAuUser>> list() { final List<SAuUser> list = userService.selectAll(); return ResponseResult.renderSuccess(list, "獲取用戶信息成功"); } } //建議在service層類上或者方法添加@DS("dsName"),可以用來指定數據庫連接那個數據庫 @Service @DS("slave_1") // slave_1 多數據源從庫名稱 ,如果不使用@DB注解,默認連接主庫 class UserServiceImpl { @Autowired private ISAuUserService userService; public List<SAuUser> selectAll() { final List<SAuUser> list = userService.list(); return list; } }