引入依赖
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>2.4.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
配置多数据源
主数据源一定要配置
#配置hikari连接池
spring.datasource.hikari.minimum-idle=4
spring.datasource.hikari.maximum-pool-size=16
spring.datasource.hikari.connection-timeout=10000
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.connection-init-sql=set names utf8mb4
#动态数据源配置
#主数据源
spring.datasource.dynamic.primary=a01
#数据源a01
spring.datasource.dynamic.datasource.a01.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.a01.url=jdbc:mysql://127.0.0.1:3306/a01?useSSL=false&autoReconnect=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.dynamic.datasource.a01.username=root
spring.datasource.dynamic.datasource.a01.password=fllove(970120)
#数据源a02
spring.datasource.dynamic.datasource.a02.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.a02.url=jdbc:mysql://127.0.0.1:3306/a02?useSSL=false&autoReconnect=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.dynamic.datasource.a02.username=root
spring.datasource.dynamic.datasource.a02.password=fllove(970120)
启动程序就可以看到如下结果,表示多数据源配置成功:
多数据源使用
项目结构
实体类
public class User {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
mapper
@Mapper
public interface A01Mapper extends BaseMapper<User> {
@Select("select * from user")
List<User> selectAllUser();
}
//@DS注解用于指定数据源,不加则默认为主数据源
@DS("a02")
@Mapper
public interface A02Mapper extends BaseMapper<User> {
@Select("select * from user")
List<User> selectAllUser();
}
service
public interface UserService {
List<User> getUserListFromA01();
List<User> getUserListFromA02();
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private A01Mapper a01Mapper;
@Autowired
private A02Mapper a02Mapper;
@Override
public List<User> getUserListFromA01() {
return a01Mapper.selectAllUser();
}
@Override
public List<User> getUserListFromA02() {
return a02Mapper.selectAllUser();
}
}
test
@SpringBootTest
class DemoApplicationTests {
@Autowired
private UserService userService;
@Test
void contextLoads() {
}
@Test
void test() {
System.out.println("A01:" + userService.getUserListFromA01());
System.out.println("A02:" + userService.getUserListFromA02());
}
}