springboot+dynamicDataSource怎么实现动态添加切换数据源
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,今天小编给大家分享一下springboot+dynamicDataSource怎么实现动态添加切换数据源的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
千家信息网最后更新 2025年11月15日springboot+dynamicDataSource怎么实现动态添加切换数据源
今天小编给大家分享一下springboot+dynamicDataSource怎么实现动态添加切换数据源的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
springboot dynamicDataSource动态添加切换数据源
之前有篇写了切换数据源的方法,那些可以在yml中配置固定的几个数据源进行切换后面需要新需求 在数据库实现增删改查数据源 然后连。
之前配置的就不说了自行查看https://www.yisu.com/article/233975.htm
1.修改初始加载的数据源map
之前传获取的tagetData是直接读取yml中的多个数据源。此时我写了dataTest方法调用主数据直接查询数据库里的某张表 并把表中内容加载成一个个数据源放到map中

2.此时一开始的时候就会加载数据库中的
一张表的数据信息作为数据源。
3.但是发现新增数据源或修改数据源时无法操作
需要重启服务,后面发现DynamicDataSource中有一个Map变量用于存储数据源,在调用其构造函数时候有进行加载

只要修改了这个map那么新增或者修改的map也可以生效了,完结。
dynamicDataSource动态添加移除数据源
数据源model
import io.swagger.annotations.ApiModelProperty;import lombok.Data;import javax.validation.constraints.NotBlank;@Datapublic class DataSourceDTO { @NotBlank @ApiModelProperty(value = "连接池名称", example = "db1") private String poolName; @NotBlank @ApiModelProperty(value = "JDBC driver", example = "com.mysql.cj.jdbc.Driver") private String driverClassName; @NotBlank @ApiModelProperty(value = "JDBC url 地址", example = "jdbc:mysql://x.x.x.x:3306/x?useUnicode=true&characterEncoding=utf-8") private String url; @NotBlank @ApiModelProperty(value = "JDBC 用户名", example = "sa") private String username; @ApiModelProperty(value = "JDBC 密码") private String password;}切换接口
import com.baomidou.dynamic.datasource.DynamicRoutingDataSource;import com.baomidou.dynamic.datasource.creator.*;import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty;import com.lets.web.vo.common.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; @Autowired private DefaultDataSourceCreator dataSourceCreator; @Autowired private DruidDataSourceCreator druidDataSourceCreator; @Autowired private HikariDataSourceCreator hikariDataSourceCreator; @GetMapping @ApiOperation("获取当前所有数据源") public Set now() { DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource; return ds.getDataSources().keySet(); } //通用数据源会根据maven中配置的连接池根据顺序依次选择。 //默认的顺序为druid>hikaricp>beecp>dbcp>spring basic @PostMapping("/add") @ApiOperation("通用添加数据源(推荐)") public Set add(@Validated @RequestBody DataSourceDTO dto) { DataSourceProperty dataSourceProperty = new DataSourceProperty(); BeanUtils.copyProperties(dto, dataSourceProperty); DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource; DataSource dataSource = dataSourceCreator.createDataSource(dataSourceProperty); ds.addDataSource(dto.getPoolName(), dataSource); return ds.getDataSources().keySet(); } @PostMapping("/addDruid") @ApiOperation("基础Druid数据源") public Set addDruid(@Validated @RequestBody DataSourceDTO dto) { DataSourceProperty dataSourceProperty = new DataSourceProperty(); BeanUtils.copyProperties(dto, dataSourceProperty); dataSourceProperty.setLazy(true); DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource; DataSource dataSource = druidDataSourceCreator.createDataSource(dataSourceProperty); ds.addDataSource(dto.getPoolName(), dataSource); return ds.getDataSources().keySet(); } @PostMapping("/addHikariCP") @ApiOperation("基础HikariCP数据源") public Set addHikariCP(@Validated @RequestBody DataSourceDTO dto) { DataSourceProperty dataSourceProperty = new DataSourceProperty(); BeanUtils.copyProperties(dto, dataSourceProperty); dataSourceProperty.setLazy(true);//3.4.0版本以下如果有此属性,需手动设置,不然会空指针。 DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource; DataSource dataSource = hikariDataSourceCreator.createDataSource(dataSourceProperty); ds.addDataSource(dto.getPoolName(), dataSource); return ds.getDataSources().keySet(); } @DeleteMapping @ApiOperation("删除数据源") public String remove(String name) { DynamicRoutingDataSource ds = (DynamicRoutingDataSource) dataSource; ds.removeDataSource(name); return "删除成功"; }} 以上就是"springboot+dynamicDataSource怎么实现动态添加切换数据源"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
数据
数据源
切换
动态
知识
篇文章
内容
数据库
配置
基础
方法
时候
顺序
不同
很大
成功
信息
函数
变量
名称
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器如何安装多个mysql
网络安全被通报检讨书
东莞云软件开发外包
oracle 数据库如何加密
tap4fun服务器工程师
世界软件开发水平排名
唐山廊坊金蝶网络技术
腾讯服务器可以查聊天记录吗
信息网络安全海报插画
迈达斯软件开发是那种语言
简化排序 数据库
阿里云架设服务器
网络技术内涵
济宁服务器租赁价格
怎么查有哪些数据库
浙江民泰商业银行软件开发
加强网络安全国际
苏州戴尔服务器结构
一念逍遥服务器有带湘字
steam拉好友一直连接服务器
软件开发外包在哪里开发
畅连点继续时提示服务器出错
网络安全防护知识手抄报内容
万广网络安全是指什么
泰兴威力网络技术多少钱
山东软件开发企业资金补贴
msql数据库超时怎么解决
高光谱 解混 数据库
服务器修好后怎么样
绑定社保卡无法连接到服务器