SpringBoot整合Nacos实现动态配置数据源

2023-11-10

1. Nacos介绍

  是不是还有好多小伙伴不知道 nacos 是啥?nacos 是阿里巴巴的一个开源项目,官网给它的定义是:

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

  SpringBoot/SpringCloud项目部署运行后,如果使用硬编码方式定义数据源,那么如果需要更换数据库,就只能通过更改源码并重启的方式来达成目的,而 nacos 配置中心这一组件,我们可以将数据源连接

属性编写在配置中心中,需要修改连接属性就可以从配置中心中修改并发布,这样就可以热修改数据源位置无需重启服务。

  其实,目前 nacos 这个组件应用很广泛,很多项目都用它来做配置中心和注册中心,今天分享的内容就是 nacos 作为配置中心使用的。

  在做之前,我查了好多示例和博客,但是都没有找到符合我需求的,所以走了好多弯路,才让这个项目完整的跑起来,现在我们就来看下如何实现 SpringBoot + Nacos + Druid 动态获取数据库配置信息。

  今天的内容比较多,如果你恰好在学习 nacos,认真看完,肯定会有收获。

  官网地址:官网地址

  官网文档地址:官网文档地址

  Gitee地址:Springboot-nacos

1.1 Nacos特性

  Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

  Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

  1、服务发现和服务健康监测

  2、动态配置服务

  3、动态 DNS 服务

  4、服务及其元数据管理

  等等。。。。

1.2 Nacos相关页面展示(登录账号密码:nacos nacos)

2. 下载安装并启动Nacos服务

2.1 下载Nacos

进入官网,点击版本前往 github,你需要去 nacos 的 GitHub 发布列表中下载,不清楚的小伙伴直接访问下面的网址进入下载页选择适合的版本:GitHub下载地址

最新版本是 2.0.4,目前最新的稳定版本是1.4.3

点击Assets,选择 zip 文件,然后应该就开始下载了,下载可能比较慢

如果 GitHub 打不开,可以从下面地址下载

  链接: 百度网盘 请输入提取码

2.2 Windows启动关闭Nacos服务

2.2.1 zip 文件结构是这样的,直接解压就行,也不需要配置环境变量

2.2.2 启动Nacos服务,进入 bin 目录下直接双击 startup.cmd,窗口不要关闭,关闭服务也就停止了

 

2.2.3 关闭Nacos服务,双击 shutdown.cmd 或者 直接关闭启动的 cmd 窗口

2.3 修改 Nacos 服务端配置信息(可不修改)

2.4 访问Nacos服务

如果没有修改 nacos 的配置,直接浏览器打开如下地址即可,如果修改了端口,需要把端口改成你修改的端口:http://127.0.0.1:8848/nacos

http://127.0.0.1:8848/nacos

默认用户名和密码都是 nacos,登陆成功之后就可以发布你的配置信息了。

2.5 启动后是没有配置的,点击 + 号发布配置信息

输入Data ID,必须唯一,类似于主键,不能重复;选择配置格式,这里我选择YAML(内容如下);然后点击发布,一个配置信息就发布成功了

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: root
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: false
                url:
                username:
                password:
            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter:
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
                # 控制台管理用户名和密码
                login-username: admin
                login-password: admin123
            filter:
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true

3. 创建Springboot-nacos项目

按下图步骤,我是创建了一个父子工程,创建了普通的maven项目,在项目下创建不同的springboot项目,也可以直接创建spring boot项目。

项目结构:

3.1 创建springboot项目

3.2 导入需要的依赖(spring-boot-start-parent版本过高可能会导致启动失败)

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.8.RELEASE</version>
</parent>
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--nacos配置-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--jdbc 数据库连接-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- 引入阿里数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.6</version>
        </dependency>
</dependencies>

3.3 resources目录下的application.yml内容注释掉

注意:需要把 application.yml 中的内容注释掉或者删除就可以

#server:
#  port: 8091
## 数据源配置
#spring:
#  datasource:
#    type: com.alibaba.druid.pool.DruidDataSource
#    driverClassName: com.mysql.cj.jdbc.Driver
#    druid:
#      # 主库数据源
#      master:
#        url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
#        username: root
#        password: root
#      # 从库数据源
#      slave:
#        # 从数据源开关/默认关闭
#        enabled: false
#        url:
#        username:
#        password:
#   。。。。。。。
#      filter:
#        stat:
#          enabled: true
#          # 慢SQL记录
#          log-slow-sql: true
#          slow-sql-millis: 1000
#          merge-sql: true
#        wall:
#          config:
#            multi-statement-allow: true

3.4 在resources目录下创建bootstrap.yml文件

spring:
  application:
    name: springboot-nacos
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        # 配置中心的地址
        server-addr: 127.0.0.1:8848
        # 配置文件prefix
        prefix: ${spring.application.name}
        # 配置文件的格式
        file-extension: yaml
        # 配置文件的环境
        group: DEFAULT_GROUP
        # 命名空间
        namespace:
server:
  port: 8090

注意:
  只能是 bootstrap.yml 文件,application 文件是整合不上的。 bootstrap.yml 先于 application.yml 加载

bootstrap.yml(bootstrap.properties)用来在程序引导时执行,应用于更加早期配置信息读取,如可以使用来配置application.yml中使用到参数等

application.yml(application.properties) 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

配置文件 prefix 是 nacos 服务器中 Data-ID 的前缀,若无此项配置,默认{spring.application.name}。项目启动时根据此配置文件拼接 nacos 配置中心的 Data-ID 的名称来查找配置文件

1. 拼接规则标准:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot整合Nacos实现动态配置数据源 的相关文章

随机推荐

  • linux-scp传输失败问题

    WARNING REMOTE HOST IDENTIFICATION HAS CHANGED IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY Someone could be eav
  • 无人机姿态融合——EKF

    联系方式 860122112 qq com 一 实验目的 使用惯性测量单元IMU和磁场传感器 磁力计 的信息 通过EKF对四旋翼无人机进行姿态融合 二 实验环境 ROS机器人操作系统 三 实验步骤 1 安装hector quadrotor
  • 3ddfa v2 实测 笔记

    目录 2d人脸关键点opencv 演示代码 不带smooth emoca 3d生成 官方开源代码相关 学习笔记
  • OS常见面试题

    常见OS面试 常见面试题 进程和线程的区别 死锁的必要条件 怎么处理死锁 Window内存管理方式 段存储 页存储 段页存储 进程的几种状态 IPC几种通信方式 什么是虚拟内存 虚拟地址 逻辑地址 线性地址 物理地址的区别 1 进程和线程
  • jupyter问题 tensorflow问题

    1 tensorflow GPU安装时间的版本问题 python cuDNN CUDA版本要对应 2 cuda 安装命令 3 当新创建conda环境时 在jupyter中使用需要进行一下步骤 4 tensorflow gpu3 0版本需要控
  • 【计算机网络】8、telnet 协议 与 golang、rust 实现

    文章目录 一 背景 二 rust 实现 三 go 实现 一 背景 http 和 ftp 可以获取远端 server 的文件 而 telnet 是基于 tcp 的协议 其可以普通用户的特权身份登录 server 并获取其制定 应用或数据的权限
  • vue路由守卫(一张图搞清)

    Vue路由守卫主要分为 全局路由守卫 路由独享守卫 组件内部守卫 常常用来拦截页面 比如新用户下单时未登录时弹出登录页面 比如一些页面需要使用token值来进行操作 判断没有token值就弹出登录或者跳到登录页面 重新获取token 导航守
  • javaWeb项目如何添加jar包

    java普通项目引入jar包就可以了 但是针对javaWeb项目却无效 添加jar包的方法是找到apache tomcat目录 将jar包放到lib目录下 只针对使用的是apache tomcat服务器的javaweb项目 使用其它服务器的
  • 计算机及网络维护知识,电脑网络维护需要知道哪些知识?

    1 首先是网线 双绞线 连接线的制作 双绞线制作有568A和568B两个标准 日常以568B标准较常用 568B标准按颜色排序为 1 橙白 2 橙 3 绿白 4 蓝 5 蓝白 6 绿 7 棕白 8 棕 使用568A标准可将568B标准中橙
  • 在Linux中安装nodejs(已编译版安装方法)

    背景 本篇文章是继 在Linux中安装nodejs 未编译版安装方法 的续集 两种方法我更推荐这种 简单 连我一个小白都会的方法 废话不多说 上干货 安装步骤 第一步 下载安装包 你可以在这里下载好了往服务器上传 也可以执行如下命令 wge
  • 2022个人投资者投资行为分析报告

    导读 报告 发现 在经历了2022年投资市场的激荡起伏后 超半数受访者对未来1 2年的投资市场仍持乐观态度 但在行动上将更为谨慎 2022年的金融市场中 超半数投资者的投资风格为稳健型 对明星基金经理 历史高收益基金追捧热情明显回落 关注公
  • Abp Framework中文文档上线

    感谢 ABP框架中国小组 给我们带来的ABP中文翻译 Web 为方便广大学习爱好者随时查阅 现推出了Gitbook风格的在线阅读文档 http www webplus org cn document abp 反馈交流 http www we
  • php禁止浏览器记住密码,关于PHP中浏览器禁止Cookie后,Session是否能继续使用

    今天去面试 被问到浏览器禁止了Cookie后 Session还能继续使用吗 当时很自信的说当然不能用了 把之前了解到的信息负复述了一边 面试官很是无奈 很显然失败的面试 回来后找了度娘 果不其然 以后面试的每个问题都需要认真对待啊 关于PH
  • 27. Pandas

    Hi 大家好 我是茶桁 先跟小伙伴们打个招呼 今天这节课呢 就是我们Python基础课程的最后一节课了 在本节课之前 我们讲解了Python的基础 介绍了两个第三方库 而今天一样会介绍一个第三方库 Pandas 虽然是最后一节课了 但是本节
  • Linux搭建LAMP、LNMP环境;论坛的搭建;

    目录 LAMP的介绍 LAMP服务的配置 LAMP的介绍 LAMP 是一个缩写 它指一组通常一起使用来运行动态网站或者服务器的自由软件 Linux 操作系统 Apache 网页服务器 MySQL 数据库管理系统 或者数据库服务器 PHP 和
  • Qt通过QStorageInfo获取磁盘大小,linux下可根据路径获取挂接磁盘的大小,而非获取所有磁盘大小的总和

    QStorageInfo类提供了系统当前挂载的存储和驱动器的相关信息 包括它们的空间 挂载点 标签名 文件系统名 可以创建一个QStorageInfo对象 使用其静态方法mountedVolumes 来得到当前系统中挂载的所有文件系统的列表
  • 推荐一个golang压缩、解压库unarr

    github地址 github com gen2brain go unarr 使用很方便 解压例子如下 func ExtractFile file string error a err unarr NewArchive file if er
  • 计算机竞赛 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

    文章目录 0 前言 2 先上成果 3 多目标跟踪的两种方法 3 1 方法1 3 2 方法2 4 Tracking By Detecting的跟踪过程 4 1 存在的问题 4 2 基于轨迹预测的跟踪方式 5 训练代码 6 最后 0 前言 优质
  • 一个多开发虚拟环境的命令行工具——asdf

    asdf是一个不错的多开发虚拟环境搭建工具 玩Ruby的时候无意发现的 Ruby常用的虚拟环境工具有RVM和Rbenv 但是现在的开发都会包含python和nodejs之类的多语言开发环境 这个工具虽然不如Docker强大 但是也足够个人开
  • SpringBoot整合Nacos实现动态配置数据源

    1 Nacos介绍 是不是还有好多小伙伴不知道 nacos 是啥 nacos 是阿里巴巴的一个开源项目 官网给它的定义是 一个更易于构建云原生应用的动态服务发现 配置管理和服务管理平台 SpringBoot SpringCloud项目部署运