如何在Spring Boot应用中使用Nacos实现动态更新数据源
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁
🦄 博客首页——猫头虎的博客🎐
🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~💐
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥
文章目录
- 如何在Spring Boot应用中使用Nacos实现动态更新数据源
- 摘要
- 引言
- 步骤
- 1. 添加依赖
- 2. 配置Nacos
- 3. 配置数据源
- 4. 创建数据源的Bean
- 5. 监听配置变化
- 6. 在Nacos中配置数据源信息
- 总结
- 参考资料
- 原创声明
如何在Spring Boot应用中使用Nacos实现动态更新数据源
摘要
本文将介绍如何在Spring Boot应用中使用Nacos作为配置中心,实现动态更新数据源配置,以便在应用运行时动态更改数据库连接信息,而无需引入Spring Cloud。我们将讨论必要的依赖、配置步骤和示例代码。
引言
在微服务架构中,动态更新数据源配置对于应对不断变化的数据库连接信息非常重要。通常,Spring Cloud和Nacos一起使用以实现此目的。然而,有时候,您可能希望在不引入Spring Cloud的情况下实现此功能,以保持项目的轻量化或其他原因。
本文将向您展示如何使用Spring Boot和Nacos实现动态更新数据源配置。我们将通过以下步骤来实现这一目标:
- 添加依赖
- 配置Nacos
- 配置数据源
- 创建数据源的Bean
- 监听配置变化
- 在Nacos中配置数据源信息
我们将使用一个简单的示例来说明这些步骤。让我们开始吧!
步骤
1. 添加依赖
首先,确保您在项目的pom.xml
文件中添加了Nacos客户端和数据库驱动程序的依赖:
<dependencies><!-- Spring Boot Starter for Nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- 数据库依赖,例如MySQL --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency>
</dependencies>
2. 配置Nacos
在application.properties
或application.yml
文件中配置Nacos的连接信息:
spring:cloud:nacos:discovery:server-addr: localhost:8848config:server-addr: localhost:8848group: DEFAULT_GROUP
3. 配置数据源
配置数据源,包括数据库连接信息和连接池设置。在application.properties
或application.yml
中添加如下配置:
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: your_usernamepassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10
4. 创建数据源的Bean
创建一个数据源Bean,这里使用HikariCP作为连接池:
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;@Configuration
public class DataSourceConfig {@Beanpublic DataSource dataSource() {return DataSourceBuilder.create().build();}
}
5. 监听配置变化
创建一个监听Nacos配置变化的Bean,以便在配置发生变化时重新加载数据源配置:
import com.alibaba.nacos.api.config.annotation.NacosConfigListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import javax.sql.DataSource;@Configuration
public class DataSourceRefreshConfig {private final DataSource dataSource;@Autowiredpublic DataSourceRefreshConfig(DataSource dataSource) {this.dataSource = dataSource;}@NacosConfigListener(dataId = "your-data-id", groupId = "your-group-id")public void onDataSourceConfigChanged(String newConfig) {// 在配置变化时重新加载数据源配置// 解析 newConfig 并更新数据源连接信息}
}
6. 在Nacos中配置数据源信息
在Nacos配置中心中创建相应的配置,例如:
# your-data-id.yaml
spring:datasource:url: jdbc:mysql://new-database-url:3306/mydbusername: new_usernamepassword: new_passworddriver-class-name: com.mysql.cj.jdbc.Driverhikari:maximum-pool-size: 10
总结
通过使用Spring Boot和Nacos,我们可以实现动态更新数据源配置,而无需引入Spring Cloud。这种方法允许我们在运行时更改数据库连接信息,从而使我们的应用程序更加灵活和适应变化。
在实际项目中,请根据您的需求和数据库连接池的选择来调整配置和代码。通过这个方法,您可以轻松地实现动态数据源配置。
参考资料
- Spring Cloud Alibaba Nacos
- Spring Boot
- HikariCP - A solid, high-performance, JDBC connection pool
- Nacos - An easy-to-use dynamic service discovery, configuration and service management platform
原创声明
======= ·
- 原创作者: 猫头虎
作者wx: [ libin9iOak ]
学习 | 复习 |
---|---|
✔ |
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,共同成长。
相关文章:

如何在Spring Boot应用中使用Nacos实现动态更新数据源
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
代码随想录算法训练营day1~18总结
时间、空间复杂度,解题过程中运用的函数补充说明 数组 day1: http://t.csdn.cn/dBSgY day2: http://t.csdn.cn/JTDvH 数组总结 链表 day3:http://t.csdn.cn/mJx9V day4:http://t.csdn.cn/qiGqz 链表总结 哈希表 day6:…...

【炼气境】HashMap原理以及如何使用
系列文章目录 文章目录 系列文章目录前言1、数据结构2、工作原理3、当两个对象的 hashCode 相同会发生什么?4、你知道 hash 的实现吗?为什么要这样实现?5、为什么要用异或运算符?6、HashMap 的 table 的容量如何确定?l…...

QT基础教程之七Qt消息机制和事件
QT基础教程之七Qt消息机制和事件 事件 事件(event)是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件在对用户操作做出响应时发出,…...

Python入门自学进阶-Web框架——40、redis、rabbitmq、git——3
git,一个分布式的版本管理工具。主要用处:版本管理、协作开发。 常见版本管理工具: VSS —— Visual Source Safe CVS —— Concurrent Versions System SVN —— CollabNet Subversion GIT GIT安装:下载安装文件:…...

skywalking agent监控java服务
一、前言 skywalking agent可以监控的服务类型有多种,python、go、java、nodejs服务等都可以监控,现在通过java服务来演示skywalking agent的使用,并且是使用容器的方式实现 二、部署skywalking agent监控 需要注意,skywalking…...
LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER
本文是LLM系列文章,针对《LARGE LANGUAGE MODEL AS AUTONOMOUS DECISION MAKER》的翻译。 作为自主决策者的大语言模型 摘要1 引言2 前言3 任务形式化4 方法5 实验6 相关工作7 结论 摘要 尽管大型语言模型(LLM)表现出令人印象深刻的语言理解…...

【Unity-Cinemachine相机】Cinemachine Brain属性详解
在Package Manager中下载Cinemachine 创建一个Virtual Camera,然后会发现Main Camera后面多出了个标志,而且属性也不能再修改了 因为绑定了CinemachineBrain,它会读取场景中某个虚拟相机的配置,并以此配置来控制相机的行为&#x…...

使用Python对数据的操作转换
1、列表加值转字典 在Python中,将列表的值转换为字典的键可以使用以下代码: myList ["name", "age", "location"] myDict {k: None for k in myList} print(myDict) 输出: {name: None, age: None, loca…...

MyBatis-Plus —— 初窥门径
前言 在前面的文章中荔枝梳理了MyBatis及相关的操作,作为MyBatis的增强工具,MyBatis-Plus无需再在xml中写sql语句,在这篇文章中荔枝将梳理MyBatis-Plus的基础知识并基于SpringBoot梳理MyBatis-Plus给出的两个接口:BaseMapper和ISe…...

音频——I2S 标准模式(二)
I2S 基本概念飞利浦(I2S)标准模式左(MSB)对齐标准模式右(LSB)对齐标准模式DSP 模式TDM 模式 文章目录 I2S format时序图逻辑分析仪抓包 I2S format 飞利浦 (I2S) 标准模式 数据在跟随 LRCLK 传输的 BCLK 的第二个上升沿时传输 MSB,其他位一直到 LSB 按顺序传传输依…...

Python语音识别处理详解
概要 人们对智能语音助手的需求不断提高,语音识别技术也随之迅速发展。在这篇文章中,我们将介绍如何使用Python的SpeechRecognition和pydub等库来实现语音识别和处理,从而打造属于自己的智能语音助手。 1. 什么是语音识别? 语音…...

【小吉送书—第一期】Kali Linux高级渗透测试
文章目录 🍔前言🛸读者对象🎈本书资源🎄彩蛋 🍔前言 对于企业网络安全建设工作的质量保障,业界普遍遵循PDCA(计划(Plan)、实施(Do)、检查&#x…...
服务器允许ssh登录root
用vim打开/etc/ssh/sshd_config sudo vim /etc/ssh/sshd_config将sshd_config中的PermitRootLogin属性改为yes ... PermitRootLogin yes ...重启sshd服务 sudo service sshd restart...

【微服务部署】三、Jenkins+Maven插件Jib一键打包部署SpringBoot应用Docker镜像步骤详解
前面我们介绍了K8SDockerMaven插件打包部署SpringCloud微服务项目,在实际应用过程中,很多项目没有用到K8S和微服务,但是用到了Docker和SpringBoot,所以,我们这边介绍,如果使用Jenkinsjib-maven-plugin插件打…...

Ansible学习笔记9
yum_repository模块: yum_repository模块用于配置yum仓库的。 测试下: [rootlocalhost ~]# ansible group1 -m yum_repository -a "namelocal descriptionlocalyum baseurlfile:///mnt/ enabledyes gpgcheckno" 192.168.17.106 | CHANGED &g…...

Ubuntu22.04安装Mongodb7.0
Ubuntu安装Mongodb 1.平台支持2.安装MongoDB社区版2.1导入包管理系统使用的公钥2.2为MongoDB创建列表文件2.3重新加载本地包数据库2.4安装MongoDB包1.安装最新版MongoDB2.安装指定版MongoDB 3.运行MongoDB社区版1.目录2.配置文件3.初始化系统4.启动MongoDB5.验证MongoDB是否成功…...
Oracle中序列删除的正确语句(oracle删除序列语句)
Oracle中序列删除的正确语句 Oracle 是由世界上最大的软件公司 Oracle Corporation 提供的关系型数据库管理系统,拥有广泛的应用和功能,如存储过程、触发器、视图、序列以及其他的复杂的特性,能够满足丰富的业务需求。本文主要研究Oracle中序…...
ChatGPT AI在线免费体验
🤖 与ChatGPT亲密接触 🤖 ChatGPT!它就是一款强大的聊天型人工智能模型,可以与你进行各种有趣的对话,就像我们在这里一样。不论你想聊天、提问、寻求建议,还是只是想找个伙伴一起闲聊,ChatGPT都…...

CSS中如何实现文字渐变色效果(Text Gradient Color)?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 文字渐变色效果(Text Gradient Color)⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...