springboot+dynamicDataSource怎么实现动态添加切换数据源
发表于:2025-02-10 作者:千家信息网编辑
千家信息网最后更新 2025年02月10日,今天小编给大家分享一下springboot+dynamicDataSource怎么实现动态添加切换数据源的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
千家信息网最后更新 2025年02月10日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 Setnow() { 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安全错误
数据库的锁怎样保障安全
泰拉瑞亚服务器什么时候重置
魔兽世界游戏多开服务器配置
网络安全事件和隐患处置情况类型
促进网络安全技术创新应用
会计网络技术考试
电竞比赛软件开发
三级网络技术序列号激活码
传奇单机暗黑破坏神2服务器为空
geo数据库生存曲线
下面哪项技术是以大数据库
统计局网络安全必要性
阜阳通信软件开发多少钱
用友t3软件数据库的用户名
苗木数据库
电脑怎么删除 清理数据库
电脑上的客户端登陆不了服务器
msq数据库的乐观锁
软件开发质量控制规程
数据库 转为excel
软件开发品牌以w开头四个字
南京机电软件开发价格优惠
推文网络安全周
网络安全高手齐聚
通信网络技术的的知识
通信网络安全知识竞赛题库
岳阳市网络安全和信息化委员会
网络安全的手抄手抄报
网络技术自考题
安卓系统使用数据库
海智网聚网络技术公司笔试