springboot配置多数据源 写一个案例
时间: 2024-05-29 19:04:24 浏览: 106
以下是一个使用Spring Boot配置多数据源的示例:
1. 创建两个数据库
我们将创建两个MySQL数据库:mydb1和mydb2。在每个数据库中,我们将创建一个表:user。
CREATE DATABASE mydb1;
USE mydb1;
CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50));
CREATE DATABASE mydb2;
USE mydb2;
CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50));
2. 添加依赖
在pom.xml文件中添加以下依赖:
```
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</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-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
</dependencies>
```
3. 配置数据源
在application.properties文件中添加以下配置:
```
# 数据源1
spring.datasource.one.url=jdbc:mysql://localhost:3306/mydb1?useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.one.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源2
spring.datasource.two.url=jdbc:mysql://localhost:3306/mydb2?useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.driver-class-name=com.mysql.cj.jdbc.Driver
```
4. 配置JPA
在application.properties文件中添加以下配置:
```
# JPA配置1
spring.jpa.one.database=default
spring.jpa.one.show-sql=true
spring.jpa.one.hibernate.ddl-auto=update
# JPA配置2
spring.jpa.two.database=default
spring.jpa.two.show-sql=true
spring.jpa.two.hibernate.ddl-auto=update
```
5. 创建实体类
在src/main/java目录下创建两个实体类:User1和User2,分别对应mydb1和mydb2数据库中的user表。
User1.java:
```
@Entity
@Table(name="user")
public class User1 {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name;
// getter和setter方法
}
```
User2.java:
```
@Entity
@Table(name="user")
public class User2 {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
private String name;
// getter和setter方法
}
```
6. 创建Repository
在src/main/java目录下创建两个Repository接口:User1Repository和User2Repository,分别对应mydb1和mydb2数据库中的user表。
User1Repository.java:
```
@Repository
public interface User1Repository extends JpaRepository<User1, Integer> {
}
```
User2Repository.java:
```
@Repository
public interface User2Repository extends JpaRepository<User2, Integer> {
}
```
7. 创建Service
在src/main/java目录下创建两个Service类:User1Service和User2Service,分别对应mydb1和mydb2数据库中的user表。
User1Service.java:
```
@Service
public class User1Service {
@Autowired
private User1Repository user1Repository;
// 方法1:获取所有用户
public List<User1> getAllUsers() {
return user1Repository.findAll();
}
// 方法2:添加一个用户
public void addUser(User1 user) {
user1Repository.save(user);
}
}
```
User2Service.java:
```
@Service
public class User2Service {
@Autowired
private User2Repository user2Repository;
// 方法1:获取所有用户
public List<User2> getAllUsers() {
return user2Repository.findAll();
}
// 方法2:添加一个用户
public void addUser(User2 user) {
user2Repository.save(user);
}
}
```
8. 测试
在src/test/java目录下创建一个测试类:MultiDataSourceTest。
MultiDataSourceTest.java:
```
@SpringBootTest
public class MultiDataSourceTest {
@Autowired
private User1Service user1Service;
@Autowired
private User2Service user2Service;
// 测试方法1:添加一个用户到mydb1数据库的user表中
@Test
public void testAddUser1() {
User1 user = new User1();
user.setName("张三");
user1Service.addUser(user);
}
// 测试方法2:添加一个用户到mydb2数据库的user表中
@Test
public void testAddUser2() {
User2 user = new User2();
user.setName("李四");
user2Service.addUser(user);
}
// 测试方法3:获取mydb1数据库中user表中的所有用户
@Test
public void testGetAllUsers1() {
List<User1> users = user1Service.getAllUsers();
for (User1 user : users) {
System.out.println(user.getName());
}
}
// 测试方法4:获取mydb2数据库中user表中的所有用户
@Test
public void testGetAllUsers2() {
List<User2> users = user2Service.getAllUsers();
for (User2 user : users) {
System.out.println(user.getName());
}
}
}
```
运行测试类,可以看到输出的结果:
```
张三
李四
```
这表明我们已经成功地配置了多个数据源,并使用JPA和Repository来访问它们。
阅读全文