最近做了個小模塊,需求就是項目同時讀取三個數據庫,操作數據。並不是分庫分表,只用定時跑,不需要對外提供接口。
技術選型:SpringBoot + Mybatis Plus(Mybatis) + Dynamic
1. 用MyBatis Plus 生成mapper、xml、service,生成方法。
2. 引用核心jar包
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>2.4.2</version> </dependency>
3. yml文件配置(有需要連接池配置的可以自己加)
spring: datasource: #配置hikari連接池 hikari: minimum-idle: 4 maximum-pool-size: 16 connection-timeout: 10000 idle-timeout: 30000 connection-init-sql: set names utf8mb4 #動態數據源配置 dynamic: #主數據源 primary: business datasource: #數據源1 business: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_business?useUnicode=true&characterEncoding=utf-8 username: **** password: **** #數據源2 user: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_user?useUnicode=true&characterEncoding=utf-8 username: **** password: **** #數據源3 order: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/db_order?useUnicode=true&characterEncoding=utf-8 username: **** password: ****
4. 在Service層加DS注解(注意:這個注解要加到mapper.xml文件對應的dao接口層,會報加載失敗異常)
@Service @DS(value = "user") public class UserServiceImpl extends ServiceImpl<UserMapper, UserInfo> implements UserService { }
bussines, order...庫配置是一樣的
5. 啟動類注解
@MapperScan("com.**.dao") @ComponentScan(value = "com.**") @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
6. 啟動項目,看日志輸出了如下信息,表示配置成功:
2019-12-16 20:50:52.565 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : business - Starting... 2019-12-16 20:50:53.611 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : business - Start completed. 2019-12-16 20:50:53.611 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : user - Starting... 2019-12-16 20:50:54.100 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : user - Start completed. 2019-12-16 20:50:54.100 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : order - Starting... 2019-12-16 20:50:54.607 INFO 12896 --- [ main] com.zaxxer.hikari.HikariDataSource : order - Start completed. 2019-12-16 20:50:54.608 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 初始共加載 3 個數據源 2019-12-16 20:50:54.608 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 動態數據源-加載 business 成功 2019-12-16 20:50:54.608 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 動態數據源-加載 user 成功 2019-12-16 20:50:54.608 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 動態數據源-加載 order 成功 2019-12-16 20:50:54.609 INFO 12896 --- [ main] c.b.d.d.DynamicRoutingDataSource : 當前的默認數據源是單數據源,數據源名為 business