SpringBoot集成nacos动态刷新数据源的实现示例
程序员文章站
2022-03-19 12:41:38
前言因为项目需要,需要在项目运行过程中能够动态修改数据源(即:数据源的热更新)。这里以com.alibaba.druid.pool.druiddatasource数据源为例第一步:重写druidabs...
前言
因为项目需要,需要在项目运行过程中能够动态修改数据源(即:数据源的热更新)。这里以com.alibaba.druid.pool.druiddatasource数据源为例
第一步:重写druidabstractdatasource类
这里为什么要重写这个类:因为druiddatasource数据源在初始化后,就不允许再重新设置数据库的url和username
public void seturl(string jdbcurl) { if (stringutils.equals(this.jdbcurl, jdbcurl)) { return; } // 重写的时候,需要将这个判断注释掉,否则会报错 // if (inited) { // throw new unsupportedoperationexception(); // } if (jdbcurl != null) { jdbcurl = jdbcurl.trim(); } this.jdbcurl = jdbcurl; // if (jdbcurl.startswith(configfilter.url_prefix)) { // this.filters.add(new configfilter()); // } } public void setusername(string username) { if (stringutils.equals(this.username, username)) { return; } // 重写的时候,需要将这个判断注释掉,否则会报错 // if (inited) { // throw new unsupportedoperationexception(); // } this.username = username; }
重写的时候包路径不能变,只有这样类加载的时候才会优先加载重写后的类
第二步:配置动态获取nacos配置信息
package com.mp.demo.config; import com.alibaba.druid.pool.druiddatasource; import lombok.data; import lombok.extern.slf4j.slf4j; import org.springframework.beans.factory.annotation.value; import org.springframework.cloud.context.config.annotation.refreshscope; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; @slf4j @configuration @refreshscope @data public class druidconfiguration { @value("${spring.datasource.url}") private string dburl; @value("${spring.datasource.username}") private string username; @value("${spring.datasource.password}") private string password; @value("${spring.datasource.driver-class-name}") private string driverclassname; @bean @refreshscope public druiddatasource datasource() { druiddatasource datasource = new druiddatasource(); datasource.seturl(this.dburl); datasource.setusername(username); datasource.setpassword(password); datasource.setdriverclassname(driverclassname); return datasource; } }
这里要注意增加@refreshscope
注解
第三步:手动刷新数据源
@getmapping("/refresh") public string refresh() throws sqlexception { druiddatasource master = springutils.getbean("datasource"); master.seturl(druidconfiguration.getdburl()); master.setusername(druidconfiguration.getusername()); master.setpassword(druidconfiguration.getpassword()); master.setdriverclassname(druidconfiguration.getdriverclassname()); master.restart(); return username + "<>" + jdbcurl+"----------"+druidconfiguration.getdburl(); }
源码地址:https://gitee.com/jackson_hou/refreshdatasource.git
到此这篇关于springboot集成nacos动态刷新数据源的实现示例的文章就介绍到这了,更多相关springboot nacos动态刷新数据源内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
上一篇: 安卓反编译揭秘(爱加密系列教程五)
推荐阅读
-
Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单
-
SpringBoot集成redis实现分布式锁的示例代码
-
Springboot集成通用Mapper与Pagehelper,实现mybatis+Druid的多数据源配置
-
SpringBoot集成nacos动态刷新数据源的实现示例
-
SpringBoot集成FastDFS依赖实现文件上传的示例
-
springboot动态定时任务的实现方法示例
-
Springboot动态切换数据源的具体实现与原理分析
-
springboot集成camunda的实现示例
-
SpringBoot集成Mybatis-plus并实现自动生成相关文件的示例代码
-
apollo与springboot集成实现动态刷新配置的教程详解