springboot配置多数据源 使用@DS注解 完整代码
时间: 2025-05-23 13:05:25 浏览: 84
### Spring Boot 中配置多数据源并使用 `@DS` 注解的完整代码示例
以下是基于提供的引用内容以及专业知识构建的一个完整的 Spring Boot 多数据源配置方案,其中包括如何使用 `@DS` 注解指定不同的数据源。
#### 1. 添加依赖
在项目的 `pom.xml` 文件中引入动态数据源启动器:
```xml
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.0</version>
</dependency>
```
此部分来源于站内引用[^1]。
---
#### 2. 配置 `application.yml`
在 `application.yml` 或 `application.properties` 文件中定义多个数据源及其相关信息。以下是一个典型的 YAML 配置示例:
```yaml
spring:
datasource:
dynamic:
primary: master # 设置主数据源名称
strict: false # 是否严格匹配数据源,默认false表示如果找不到对应的数据源则回退到主数据源
datasource:
master:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/master_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
slave:
username: user
password: abcdefg
url: jdbc:mysql://localhost:3306/slave_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
```
该部分内容来自站内引用[^3],并对字段进行了扩展说明。
---
#### 3. 创建数据源配置类
创建一个 Java 类用于加载主数据源和其他数据源的相关参数。例如:
```java
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master")
@Data
public class MasterDataSourceConfig {
private String username;
private String password;
private String url;
private String driverClassName;
}
```
以上代码片段参考自站内引用[^2],适用于主数据源的配置。
对于其他数据源(如从库),也可以按照类似的模式进行声明。
---
#### 4. 使用 `@DS` 注解切换数据源
通过 MyBatis Plus 提供的 `@DS` 注解可以在运行时动态切换数据源。具体应用方式如下所示:
##### (1)在 Mapper 接口中使用 `@DS` 注解
当某个接口需要访问特定数据源时,在其上标注 `@DS` 即可:
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.dynamic.datasource.annotation.DS;
@DS("slave") // 切换至从库
public interface SlaveUserMapper extends BaseMapper<User> {
// 自定义查询逻辑...
}
```
这部分功能描述源自站内引用[^4]。
##### (2)在 Service 层方法中使用 `@DS` 注解
如果仅希望某些业务逻辑调用特定数据源,则可在服务层的方法级别添加注解:
```java
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.springframework.stereotype.Service;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
@DS("slave") // 当前方法会切换至从库执行
public User findUserById(Long id) {
return this.baseMapper.selectById(id);
}
}
```
同样依据站内引用[^4]中的指导完成实现。
---
#### 5. 注意事项
- 如果未找到指定的数据源且设置了 `strict=false`,程序将自动回退到主数据源。
- 数据源 URL 和驱动类名需根据实际使用的数据库类型调整。
- 建议测试阶段验证各数据源连通性以减少潜在错误风险。
---
### 总结
上述代码展示了如何利用 `dynamic-datasource-spring-boot-starter` 插件配合 `@DS` 注解快速搭建一个多数据源环境,并提供了详细的配置流程与注意事项。
阅读全文
相关推荐


















