基於springBoot專案如何配置多資料來源
阿新 • • 發佈:2021-12-11
前言
有時,在一個專案中會用到多資料來源,現在對自己在專案中多資料來源的操作總結如下,有不到之處敬請批評指正!
1.pom.xml的依賴引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mysql驅動包的引入--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.17</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <!-- 苞米豆的dynamic-datasource-spring-boot-starter:--> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.3.1</version> </dependency> <!-- mybatisPlus包的匯入--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.1</version> </dependency> <!-- 引入swagger-bootstrap-ui包 /doc.html--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>swagger-bootstrap-ui</artifactId> <version>1.9.6</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>1.5.22</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>1.5.22</version> </dependency> <!-- 引入oracle包 /doc.html--> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.1.0.7.0</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> <scope>compile</scope> </dependency>
2.在Springboot的application.yml中進行配置:
server: port: 8081 servlet: context-path: / spring: application: name: spring-boot-dynamic-demo datasource: dynamic: primary: master #設定預設的資料來源或者資料來源組,預設值即為master strict: false #設定嚴格模式,預設false不啟動. 啟動後在未匹配到指定資料來源時候會丟擲異常,不啟動則使用預設資料來源. datasource: master: url: jdbc:oracle:thin:@localhost:1521/orcl username: scott password: 123456 driver-class-name: oracle.jdbc.driver.OracleDriver slave_1: url: jdbc:mysql://localhost:3306/lzsszhyjpt?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl global-config: db-config: logic-delete-value: 1 logic-not-delete-value: 0 logic-delete-field: deleted mapper-locations: classpath:/mapper/**.xml
3.多個數據源如何在業務介面中配置和使用
其中配置了兩個資料來源,master與sub,其中選擇master作為預設資料來源(對應primary配置);
若想使用sub作為部分程式碼的資料來源,可在ServiceImpl做如下配置:
@DS("sub")
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}
4.在使用@DS註解時,有如下注意事項:
古今成大事者,不唯有超世之才,必有堅韌不拔之志!(1)不能使用事務,否則資料來源不會切換,使用的還是第一次載入的資料來源; (2)第一次載入資料來源之後,第二次、第三次…操作其它資料來源,如果資料來源不存在,使用的還是第一次載入的資料來源; (3)資料來源名稱不要包含下劃線,否則不能切換。