1. Create an empty springboot project
2. Configure the pom.xml configuration file, only modify the content in dependencies, which can be replaced directly
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</artifactid> </dependency> <dependency> <groupid>org.apache.httpcomponents</groupid> <artifactid>httpclient</artifactid> </dependency> <dependency> <groupid>cn.hutool</groupid> <artifactid>hutool-all</artifactid> <version>5.2.0</version> </dependency> <dependency> <groupid>com.alibaba</groupid> <artifactid>fastjson</artifactid> <version>1.2.9</version> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> <optional>true</optional> </dependency> <!-- mybatis-plus --> <dependency> <groupid>com.baomidou</groupid> <artifactid>mybatis-plus-boot-starter</artifactid> <version>3.4.1</version> </dependency> <!-- 多数据源配置 --> <dependency> <groupid>com.baomidou</groupid> <artifactid>dynamic-datasource-spring-boot-starter</artifactid> <version>3.2.0</version> </dependency> <!-- mysql --> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <scope>runtime</scope> </dependency></dependencies>
3. Configure the data source
spring: datasource:dynamic: primary: master #指定默认数据库,下面可以配置多个数据库,不仅仅是两个,master就是其中一个数据库的名字,名字对应就可以,自己随便取 datasource:master: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://数据库1ip地址:数据库1端口/数据库1?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true username: 数据库1用户 password: 数据库1密码slave: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://数据库2ip地址:数据库2端口/数据库2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true username: 数据库2用户 password: 数据库2密码
4. Create a new corresponding
entity, mapper, service, impl
If you need to call an unused database source, just use the annotation @DS("database name" in impl )
#5. Write a timer to call data query, or you can call data query in the controller. The query method is the same
package com.xyz.dsjy.task;import com.xyz.dsjy.entity.Enterprise;import com.xyz.dsjy.entity.FjflCredit;import com.xyz.dsjy.service.EnterpriseService;import com.xyz.dsjy.service.FjflCreditService;import lombok.AllArgsConstructor;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableScheduling;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;import java.time.LocalDateTime;@AllArgsConstructor@Component@Configuration //1.主要用于标记配置类,兼备Component的效果。@EnableScheduling // 2.开启定时任务public class MultithreadScheduleTask {public final FjflCreditService fjflCrediService; public final EnterpriseService enterpriseService; @Scheduled(fixedRate=5000)private void configureTasks() { FjflCredit fs = fjflCrediService.getById(1); System.out.println(fs); System.err.println("执行静态定时任务时间: " + LocalDateTime.now()); }@Scheduled(fixedRate=6000)private void configureTasks2() { Enterprise et = enterpriseService.getById(80); System.out.println(et); System.err.println("执行静态定时任务时间2222: " + LocalDateTime.now()); } }
6 .Modify the startup class @MapperScan("com.xyz.dsjy.mapper") Add mapper scan
package com.xyz.dsjy;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan("com.xyz.dsjy.mapper") //添加启动扫mapper包下的mapper类public class DsjyApplication {public static void main(String[] args) { SpringApplication.run(DsjyApplication.class, args); } }
7. Start the project and correctly output the results we need
Pitfalls encountered:
Pit 1:
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver clas
Because pom.xml introduces druid and dynamic, and we are using dynamic, we only need to delete the introduction of druid.
Pit 2:
2021-04-08 15:52:53.242 INFO 20108 --- [ main] com.zaxxer.hikari.HikariDataSource : master - Starting...
2021-04 -08 15:52:54.125 INFO 20108 --- [ main] com.zaxxer.hikari.HikariDataSource : master - Start completed.
2021-04-08 15:52:54.126 INFO 20108 --- [ main] com .zaxxer.hikari.HikariDataSource : slave - Starting...
2021-04-08 15:52:54.942 INFO 20108 --- [ main] com.zaxxer.hikari.HikariDataSource : slave - completed Start.
2021-04-08 15:52:54.942 INFO 20108 --- [ main] c.b.d.d.DynamicRoutingDataSource : dynamic-datasource - load a datasource named [slave] success
2021-04-08 15:52:54.943 INFO 2010 8 -- - [ main] c.b.d.d.DynamicRoutingDataSource : dynamic-datasource - load a datasource named [master] success
2021-04-08 15:52:54.943 INFO 20108 --- [ main] c.b.d.d.DynamicRoutingDataSource : dynamic-datasource initial loaded [2 ] datasource,primary
.....
2021-04-08 15:52:54.989 INFO 20108 --- [ main] com.zaxxer.hikari.HikariDataSource : slave - Shutdown initiated...
2021-04-08 15:52:54.996 INFO 20108 --- [ main] com.zaxxer.hikari.HikariDataSource : slave - Shutdown completed.
2021-04-08 15:52: 54.996 INFO 20108 --- [ main] com.zaxxer.hikari.HikariDataSource : master - Shutdown initiated...
2021-04-08 15:52:55.164 INFO 20108 --- [ main] com.zaxxer.hikari .HikariDataSource : master - Shutdown completed.
2021-04-08 15:52:55.165 INFO 20108 --- [ main] c.b.d.d.DynamicRoutingDataSource : dynamic-datasource all closed success,bye
You can see the startup During the process, the multiple database sources we configured were Start completed. Then we encountered an exception and were shut down again.
Caused by the introduction of multiple Mybatis jar packages, check whether the bom.xml file has introduced two dependencies, mybatis and mybatis-plus. If so, just remove mybatis.
The above is the detailed content of How to use mybatis-plus to configure multiple data sources in springboot. For more information, please follow other related articles on the PHP Chinese website!