spring.datasource.dynamic.datasource配置动态数据源
时间: 2025-01-08 17:31:18 浏览: 25
### 配置 Dynamic Datasource 实现多数据源
在 Spring Boot 应用程序中配置 `dynamic-datasource` 可以通过引入特定的 starter 并按照官方文档中的指导来完成[^1]。
#### 添加依赖项
为了支持动态数据源功能,项目构建文件应当包含如下依赖:
对于 Maven 构建工具而言,
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>{latest-version}</version>
</dependency>
```
而对于 Gradle 用户,则应添加:
```groovy
implementation 'com.baomidou:dynamic-datasource-spring-boot-starter:{latest-version}'
```
#### 数据源配置
接着,在应用程序属性文件 (`application.yml`) 中定义多个数据库连接的信息。这里展示了一个简单的例子,其中包含了两个不同的 MySQL 数据库实例作为主从架构的一部分:
```yaml
spring:
datasource:
dynamic:
primary: master # 设置默认的数据源或者数据源组, 默认值即为master
strict: false # 是否严格检查数据源存在,默认false不验证
datasource:
master:
url: jdbc:mysql://localhost:3306/master_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
slave_1:
url: jdbc:mysql://localhost:3307/slave_db?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
```
#### 动态切换数据源
当需要指定某个操作所使用的具体数据源时,可以利用 `@DS` 注解来进行标记。此注解能够应用于类级别或方法级别上,从而实现更加灵活的数据访问控制策略[^2]。
例如,下面是一个 Repository 接口的例子,它指定了所有的查询都将针对名为 "slave_1" 的副本执行:
```java
@DS("slave_1")
public interface UserRepository extends JpaRepository<User, Long> {
}
```
又比如在一个服务层的方法里临时改变当前线程上下文中正在使用的目标数据源:
```java
@Service
public class UserService {
@Autowired
private DataSourceContextHolder dataSourceContextHolder;
public void performOperationOnMaster() {
try {
// Switch to the master data source for this operation.
dataSourceContextHolder.setDataSourceType("master");
// Execute operations that require writing...
} finally {
// Reset back to default after completing write actions.
dataSourceContextHolder.clear();
}
}
}
```
阅读全文