springboot+dynamicDataSource怎么实现动态添加切换数据源
发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,今天小编给大家分享一下springboot+dynamicDataSource怎么实现动态添加切换数据源的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考
千家信息网最后更新 2024年12月01日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安全错误
数据库的锁怎样保障安全
网络技术的趋势图
软件开发票税率一般是多少
MAPGIS软件开发
用数据库求阶乘的和
外资企业网络安全建设
软件开发和前端哪个工资高
基于信创框架的达梦数据库
做好网络安全常识
河南app软件开发
win10怎么做网站服务器
游戏软件开发项目经理简历
网络安全事件分级根据
多数据库并行查询
软件开发工资怎么样
山东有实力的联想服务器云空间
辽宁首选dns服务器地址怎么填
小学生网络安全知识课件
数据库是数据库系统
c语言中数据库是第几章
一般网络安全事故责任追究
数据库数据取整数
网络安全学习Python
200t 存储服务器
教育网络安全建设
海康服务器mgmt端口
澳门万物互联网科技公司法人
如何把网络安全管理工作提升
服务器补丁管理软件哪个好用
手机app请求被服务器拒绝
网络技术有前台和什么职位