文章目录
- 实现原理
- 示例程序
🗯️ 上节回顾:前节中,了解了 dynamic-datasource 的事务支持。
👉 本节目标:了解 dynamic-datasource 的进阶用法 - 动态添加/移除数据源。
动态添加/移除数据源:指在系统运行过程中动态的添加数据源,删除数据源,多使用于基于数据库的多租户系统。常常新的一个租户进来需要动态的添加一个数据源到库中,使得系统不用重启即可切换数据源。
实现原理
重点 1:动态增加 DataSource,依靠 DynamicRoutingDataSource
提供的 addDataSource() 和 removeDataSource() 方法,实现数据源动态的添加和移除。
DynamicRoutingDataSource
类常用方法:CRUD 都有了 😊
重点 2:创建 DataSource,使用 DataSourceCreator
接口的实现类来创建数据源。
- DefaultDataSourceCreator:通用数据源创建器,其根据环境自动选择连接池
- BasicDataSourceCreator:调用 Spring 原生的创建方式,只支持最原始的基础配置
- HikariDataSourceCreator:创建 HikariDataSource
- DruidDataSourceCreator:创建 DruidDataSource
示例程序
提供 HTTP API 来动态添加/移除数据源:
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;
import com.baomidou.dynamic.datasource.creator.*;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;
import com.baomidou.samples.ds.dto.DataSourceDTO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.sql.DataSource;
import java.util.Set;
@RestController
@RequestMapping("/datasources")
@Api(tags = "添加删除数据源")
public class DataSourceController {
@Autowired
private DataSource dataSource;
// private final DataSourceCreator dataSourceCreator; //3.3.1及以下版本使用这个通用,强烈推荐sb2用户至少升级到3.5.2版本
@Autowired