【微服务笔记20】微服务组件之Nacos配置中心基础环境搭建、配置持久化、动态刷新配置

news2024/12/25 0:31:11

这篇文章,主要介绍微服务组件之Nacos配置中心基础环境搭建、配置持久化、动态刷新配置。

目录

一、搭建Nacos配置中心环境

1.1、Nacos配置中心介绍

1.2、搭建Nacos配置中心客户端

(1)引入依赖

(2)添加配置信息

(3)创建配置信息

(4)编写测试类

(5)运行测试

(6)动态刷新配置

二、配置持久化到MySQL

2.1、创建数据库

2.2、修改NacosServer服务端配置

2.3、运行测试


一、搭建Nacos配置中心环境

1.1、Nacos配置中心介绍

Nacos是Spring Cloud Alibaba微服务生态中,一个可以实现服务发现、配置管理的组件,也就是说Nacos同时具备了注册中心、配置中心的功能,和Spring Cloud Config的配置中心不同的是,Nacos实现的配置中心可以将内容保存在Git仓库里面,也可以将配置信息保存到MySQL数据库里面,默认情况下,配置信息是采用嵌入式的数据库保存的。

前一篇文章介绍了Nacos实现注册中心的功能,并且搭建了Nacos Server服务端工程,这篇文章也是需要使用Nacos Server服务端工程,可以参考前一篇文章搭建【【微服务笔记19】微服务组件之Nacos注册中心基础环境搭建】。

1.2、搭建Nacos配置中心客户端

(1)引入依赖

<!-- 引入 nacos config 配置中心客户端依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

(2)添加配置信息

引入nacos-config配置中心客户端依赖之后,还需要告诉应用程序,从哪个地址获取配置信息,需要在【bootstrap.yml】配置文件中,添加如下内容:

server:
  port: 9988
spring:
  application:
    name: nacos-config-consumer # 微服务名称
  cloud:
    # 这里是nacos的配置属性
    nacos:
      # 配置中心配置,配置管理
      config:
        enabled: true # 启用nacos配置中心
        server-addr: 127.0.0.1:8848 # nacos server 配置中心服务端的地址
        namespace: dev # 命名空间,用于区别不同的环境,例如:开发环境、测试环境
        group: DEFAULT_GROUP # 分组名称,可以看作是一个项目工程
        prefix: 'application-dev' # 配置文件的 dataid 值
        file-extension: yaml # 指定配置文件的扩展名称,文件后缀

(3)创建配置信息

打开nacos控制台界面,进入配置管理菜单,配置列表界面,选择创建配置,输入配置信息即可。

(4)编写测试类

package com.gitcode.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @version 1.0.0
 * @Date: 2023/4/22 17:24
 * @Copyright (C) ZhuYouBin
 * @Description:
 */
@RestController
@RequestMapping("/api/nacos")
public class GetConfigController {

    @Value("${appVersion}")
    private String appVersion;

    @Value("${appName}")
    private String appName;

    @GetMapping("/getConfig")
    public String getConfig() {
        String msg = "应用名称: " + appName + ", 当前版本: " + appVersion;
        System.out.println(msg);
        return msg;
    }
}

(5)运行测试

启动工程,浏览器访问【localhost:9988/api/nacos/getConfig】地址,查看是否能够获取到配置信息。

(6)动态刷新配置

当配置信息修改之后,默认情况下,客户端是不会动态的获取最新配置的,不过可以通过下面几种方式实现配置的动态刷新功能。

  • 第一种情况:如果使用的是【@Value】注解获取的配置信息,那就可以结合【@RefreshScope】注解实现,动态刷新配置。
  • 第二种情况:通过注入【ConfigurableApplicationContext】对象,调用该对象的【getEnvironment()】方法,获取到环境对象,再调用其中的【getProperty()】方法,动态获取配置信息。
package com.gitcode.demo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @version 1.0.0
 * @Date: 2023/4/22 17:24
 * @Copyright (C) ZhuYouBin
 * @Description:
 */
// 动态刷新配置
@RefreshScope
@RestController
@RequestMapping("/api/nacos")
public class GetConfigController {

    @Value("${appVersion}")
    private String appVersion;

    @Value("${appName}")
    private String appName;

    /**
     * 注入配置上下文对象
     */
    @Autowired
    private ConfigurableApplicationContext applicationContext;

    @GetMapping("/getConfig")
    public String getConfig() {
        String msg = "应用名称: " + appName + ", 当前版本: " + appVersion;
        System.out.println(msg);
        return msg;
    }
    
    @GetMapping("/getConfig2")
    public String getConfig2() {
        ConfigurableEnvironment environment = applicationContext.getEnvironment();
        String appName = environment.getProperty("appName");
        String appVersion = environment.getProperty("appVersion");
        String msg = "应用名称: " + appName + ", 当前版本: " + appVersion;
        System.out.println(msg);
        return msg;
    }
}

到此,nacos配置中心客户端就搭建好啦。

二、配置持久化到MySQL

2.1、创建数据库

默认情况下,nacos是采用嵌入式的数据库保存配置信息,当然它也支持将配置信息保存到MySQL数据库里面,这就需要我们手动修改NacosServer工程的配置文件,修改配置文件之间,需要创建好对应的MySQL数据库。

打开Nacos Server工程的解压目录,进入里面的【conf】目录下,找到一个【mysql-schema.sql】文件,这个就是nacos提供给我们的持久化数据库的SQL脚本文件,将这个SQL脚本文件导入到MySQL数据库里面即可。

2.2、修改NacosServer服务端配置

进入Nacos Server服务端的【conf】目录下,找到【application.properties】配置文件,修改MySQL数据库的连接信息。

# 启用mysql进行持久化
spring.datasource.platform=mysql
# 数据库的数量
db.num=1
# 数据库连接地址
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=root

修改完成之后,重新启动Nacos Server服务即可实现配置信息的持久化。

2.3、运行测试

重新启动Nacos Server服务,然后进入nacos控制台,创建配置信息,查看MySQL数据库中是否有对应的数据记录即可。

到此,nacos配置信息就成功的持久化到MySQL数据库啦。

综上,这篇文章结束了,主要介绍微服务组件之Nacos配置中心基础环境搭建、配置持久化、动态刷新配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/448451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图书管理系统的开发与设计(论文+源码)_kaic

摘 要 随着科学技术的快速发展&#xff0c;尤其是计算机技术的突飞猛进&#xff0c;计算机技术普及到日常生活、学习生活的方方面面。由此想到学校的相对于传统的图书管理系统&#xff0c;帮助到学校的读者和学校的图书管理员的系统。提升图书管工作人员的效率&#xff0c;满足…

【C++类和对象】类和对象(中):构造函数 {六个默认成员函数;构造函数的概念及特性;编译器自动生成的构造函数;默认构造函数}

一、类的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器…

Pytorch深度学习笔记(六)用pytorch实现线性回归

目录 1.数据准备 2.设计模型 3.构造损失函数和优化器 4.训练周期&#xff08;前馈—>反馈—>更新&#xff09; 课程推荐&#xff1a;05.用PyTorch实现线性回归_哔哩哔哩_bilibili 线性通常是指变量之间保持等比例的关系&#xff0c;从图形上来看&#xff0c;变量之间…

为什么要学习微服务?

文章目录 1.认识微服务1.1微服务由来1.2为什么需要微服务&#xff1f; 2.两种架构2.1.单体架构2.2.分布式架构 3.微服务的特点4.SpringCloud5.总结最后说一句 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为…

类和对象(上篇)

类和对象----上篇 &#x1f506;面向过程和面向对象的初步认识&#x1f506;类的引入&#x1f506;类的定义&#x1f506;类的访问限定符及封装访问限定符封装 &#x1f506;类的作用域&#x1f506;类的实例化&#x1f506;类的对象大小的计算如何计算一个类的大小结构体内存对…

15天学习MySQL计划(多表联查)第四天

15天学习MySQL计划&#xff08;多表联查&#xff09;第四天 1.多表查询 1.1概述 ​ 指从多张表中查询数据 ​ 在项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务之间相互…

【HCIP】Huawei设备下IPV4IPV6共存实验

目录 方法一、普通的GRE将V6基于V4通讯 方法二、6to4的tunnel 方法三、双栈 方法一、普通的GRE将V6基于V4通讯 //方法一和方法二的前提&#xff0c;搭个简单的V4网络就行 [r1]int g0/0/0 [r1-GigabitEthernet0/0/0]ip address 12.1.1.1 24 [r1]router id 1.1.1.1 [r1-Gigabi…

Spring Security 05 密码加密

目录 DelegatingPasswordEncoder 使用 PasswordEncoder 密码加密实战 密码自动升级 实际密码比较是由PasswordEncoder完成的&#xff0c;因此只需要使用PasswordEncoder 不同实现就可以实现不同方式加密。 public interface PasswordEncoder {// 进行明文加密String encod…

如何搭建自己的博客网站(手把手教你搭建免费个人博客网站)

没有前言直接开始正文&#xff0c;搭建一个博客需要服务器&#xff0c;域名&#xff0c;博客程序。 博客程序常用的有wordpress&#xff0c;z-blog&#xff0c;typecho等等&#xff0c;其中wordpress和z-blog最为简单&#xff0c;typecho需要一定的技术含量&#xff0c;这里暂…

使用NPOI做Excel简单报表

文章目录 前言初版表格&#xff0c;单元格的合并进阶表格&#xff0c;单元格美化小结 前言 前面介绍了NPOI单元格样式的使用、单元格合并&#xff0c;以及NPOI提供的颜色。现在用上前面的一些知识点&#xff0c;做一个测试结果表格。 1、 介绍NPOI 的颜色卡、名称以及索引 ht…

图片去摩尔纹简述实现python代码示例

这篇文章主要为大家介绍了图片去摩尔纹简述实现的python代码示例&#xff0c;有需要的朋友可以借鉴参考下&#xff0c;希望能够有所帮助&#xff0c;祝大家多多进步&#xff0c;早日升职加薪 1、前言 当感光元件像素的空间频率与影像中条纹的空间频率接近时&#xff0c;可能产生…

分布式系统需要关注的技术点和面试经常问的点

1、分布式系统概述 关于什么是分布式系统&#xff0c;有很多文章介绍&#xff0c;其实这个并不难理解&#xff0c;大白话讲就是&#xff1a;工厂活多了一个人撑不住&#xff0c;那就多找些工人一起干&#xff0c;要让这么多人为了一个目标干得快干得好&#xff0c;就需要一些规…

自主可控智能网联汽车操作系统

开发自主可控智能网联汽车操作系统的必要性 当下&#xff0c;传统汽车操作系统行业的核心技术几乎由国外的黑莓、谷歌、风河、Vector、ETAS等垄断。操作系统已成为我国智能网联汽车发展过程中的关键卡脖子技术&#xff0c;开发自主可控的智能网联汽车操作系统势在必行。 操作…

CVPR 2023 | 达摩院REALY头部重建榜单冠军模型HRN解读

团队模型、论文、博文、直播合集&#xff0c;点击此处浏览 前言 高保真 3D 头部重建在许多场景中都有广泛的应用&#xff0c;例如 AR/VR、医疗、电影制作等。尽管大量的工作已经使用 LightStage 等专业硬件实现了出色的重建效果&#xff0c;从单一或稀疏视角的单目图像估计高精…

微服务架构设计与实践

随着互联网的发展&#xff0c;软件开发已经成为各种企业发展的重要手段。然而&#xff0c;单体应用在长时间的维护中会变得复杂、难以扩展、难以修改。因此&#xff0c;为了满足业务需求&#xff0c;微服务架构应运而生。本篇文章将深入探讨微服务架构的设计与实践。 一、微服务…

C++中的类与对象

类与对象 我们在C语言中自定义的struct 叫做结构体&#xff0c;而在C中我们把struct升级为了类&#xff0c;并且还加入了一个class&#xff0c;也称为类&#xff0c;那么我们今天就来看一下结构体和类的不同和相同 1.结构体与类 我们在C语言中的结构体是struct&#xff0c;而…

QT学习笔记(持续更新)

QT 一、按钮 1.效果 2.代码 #include<QPushButton>//头文件myWidget::myWidget(QWidget *parent): QWidget(parent) {//方法1QPushButton *btnnew QPushButton;//btn->show();//以顶层方式显示btn->setParent(this);//在myWidget窗口中btn->setText("按钮…

JS编程中的API hook

JavaScript奇技淫巧&#xff1a;Hook与反Hook 作者&#xff1a;专注于JS混淆加密的 JShaman API HOOK技术&#xff0c;在PC时代曾盛行&#xff0c;是高端的技术。在JavaScript编程中&#xff0c;也可以应用API Hook技术实现不寻常的效果。 例&#xff0c;eval hook&#xff1a…

Kotlin 基础 笔记

这里写目录标题 变量函数条件语句if/else 语句when 语句if/else 表达式 和 when 表达式 Kotlin 中的null使用 ?: Elvis 运算符 类和对象构造函数类之间的关系可见性修饰符定义属性委托 变量 变量是存储单项数据的容器&#xff0c;必须先声明变量&#xff0c;才可以使用。 常见…

Centos7.5 如何安装Bacula 11.05详细教程

环境: 本地华为桌面云服务器环境 Centos 7.5 Bacula 11.05 问题描述: Centos7.5 如何安装Bacula 解决方案: 一、官网下载Bacula 1.下载Source Files11.0.5 2.先安装C 和 C++ 编译器 root@localhost ~]# yum install -y gcc gcc-c++ 1 已安装: 2 gcc.x86_64 0:…