SpringCloudAlibaba微服务实战系列(二)Nacos配置中心

news2024/11/24 15:26:52

SpringCloudAlibaba Nacos配置中心

在java代码中或者在配置文件中写配置,是最不雅的,意味着每次修改配置都需要重新打包或者替换class文件。若放在远程的配置文件中,每次修改了配置后只需要重启一次服务即可。话不多说,直接干货拉满。

集成nacos配置中心

首先引入配置相关的依赖

<!--Nacos 配置中心依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--bootstrap的依赖,由于SpringCloud2020版本上bootstrap被默认禁用了所以要引入才能使用-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

其次保证项目启动时,配置先从nacos配置中心获取,所以配置都写在bootstrap.ymlbootstrap.properties中即可。bootstrap的文件比application的优先级要高。配置详情如下:

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式

nacos中的DataId配置

DataId主要是使当前项目快速进行多套配置内容的切换,看看DataId的组成格式:

${prefix}-${spring.profiles.active}.${file-extension}

  • prefix:项目的服务名,也就是spirng.application.name的值
  • spring.profiles.active:当前的环境
  • file-extension:文件后缀

当spring.profiles.active为空时,对应的’-'连接符也将会不存在,DataId的格式就是变换为${prefix}.${file-extension}

设置profiles为dev

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式

  profiles:
    active: dev

那么我们的文件名就应该为consumer-dev.yml,我们需要在nacos上创建配置,先创建consumer-dev.yml和consumer-prod.yml文件

在这里插入图片描述

在这里插入图片描述

通过代码获取这个配置,然后通过调整环境,注意它们的配置返回。

@RestController// @RestController注解是@Controller+@ResponseBody
@RefreshScope //通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新
public class ConfigController {

    @Value("${custom.info}")// 注解获取custom.info配置的值
    private String config;

    @RequestMapping("/getConfig")
    public String getConfig() {  // 获取配置的接口
        return config;
    }
}

调用查看结果:

D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev

切换为prod环境,重启项目再次调用

spring:
  profiles:
    active: prod
D:\springcloud\doc>curl localhost:9001/getConfig
nacos config prod

莫得问题~

Nacos的Group配置

group是分组的意思,表示配置内容归于哪个组,默认的是DEFAULT_GROUP组,如创建配置文件时声明一个CONSUMER_GROUP

在这里插入图片描述

java代码配置:

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式
        group: CONSUMER_GROUP # 指定某GROUP

  profiles:
    active: dev

重启调用

D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev CONSUMER_GROUP

nacos的Namespace配置

namespace表示命名空间,比较粗粒度的控制。默认的namespace是public,当创建新的命名空间时,如果要指定此命名空间,则需要在java配置中声明它的namespace的id值

在这里插入图片描述

如上图创建了一个命名空间,在namespace中创建consumer-dev.yml的配置文件

在这里插入图片描述

在这里插入图片描述

在java配置中namespace是填写的ID值而不是名称

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式
        namespace: e6d5450d-a8d3-45c4-9801-091586082104 # 命名空间的id值

  profiles:
    active: dev

Nacos的持久化

Nacos默认的是使用嵌入式数据库Derby数据库,也就表明越到后面越容易出现瓶颈,如存储容量限制,不方便数据查询、存储优化等等。Nacos支持使用mysql做数据持久化,版本要求mysql在5.6.5+

mysql数据持久化

在mysql中创建一个数据库,并且导入nacos-mysql.sql的文件(路径是/conf/nacos-mysql.sql)

在这里插入图片描述

在Nacos的conf/application.properties文件中添加mysql数据源支持

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql	# 添加mysql数据源

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root		# 数据库账号
db.password.0=123456	# 密码

重启下nacos,登录进入后,发现我们刚刚测试的那些数据都不在了,这就是不做持久化的问题。

现在已经将数据的持久化加上了,我们像刚刚一样随便添加几个数据,然后再次重启nacos,看看数据有没有丢失。

在这里插入图片描述

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式

  profiles:
    active: dev

调试:

D:\springcloud\doc>curl localhost:9001/getConfig
nacos config dev

重启nacos,可以看到我们的数据都还在

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CVB6CGNJ-1690076592178)(../imgs1/16.png)]

nacos的配置扩展

除了通过${prefix}-${spring.profiles.active}.${file-extension}的方式指定我们的配置文件,我们还可以直接通过dataId配置指定nacos上的一些共享配置

如创建了一个redis的共享配置

在这里插入图片描述

在java项目中不仅要读取consumer-dev.yml还要读取redis.yml的配置,可以使用extension-configs来声明

server:
  port: 9001
spring:
  application:
    name: consumer # 应用名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址
      config:
        server-addr: localhost:8848 # nacos地址
        file-extension: yml # 指定配置内容的数据格式
        extension-configs:
          -
            dataId: redis.yml
            group: DEFAULT_GROUP
            refresh: true

  profiles:
    active: dev

extension-configs是一个数组,extension-configs中若有多个配置时

extension-configs:
  -
    dataId: redis.yml
    group: DEFAULT_GROUP
    refresh: true
  -
    dataId: rabbitmq.yml
    group: DEFAULT_GROUP
    refresh: true

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

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

相关文章

java实现ffmpeg音频文件分割

项目中需要将视频会议中录入的音频文件通过阿里云语音识别为文件&#xff0c;但是阿里云语音识别对音频大小有限制&#xff0c;因此通过ffmpeg将大音频文件分割为几个短音频文件&#xff0c;并进行语音识别操作。 代码如下&#xff1a; package com.vion.utils; import java.i…

openGauss学习笔记-18 openGauss 简单数据管理-WHERE子句

文章目录 openGauss学习笔记-18 openGauss 简单数据管理-WHERE子句18.1 语法格式18.2 参数说明18.3 示例 openGauss学习笔记-18 openGauss 简单数据管理-WHERE子句 当我们需要根据指定条件从表中查询数据时&#xff0c;就可以在SELECT语句中添加WHERE子句&#xff0c;从而过滤…

Install Ansible on CentOS 8

环境准备&#xff1a; 1.至少俩台linux主机&#xff0c;一台是控制节点&#xff0c;一台是受控节点 2.控制节点和受控节点都需要安装Python36 3.控制节点需要安装ansible 4.控制节点需要获得受控节点的普通用户或root用户的权限&#xff0c;控制节点需要ssh客户端&#xff0c;…

24考研数据结构-——绪论

数据结构 引用文章第一章&#xff1a;绪论1.0 数据结构在学什么1.1 数据结构的基本概念1.2 数据结构的三要素1.3 算法的基本概念 引用文章 在此基础上增加自己的学习过程: 《王道》数据结构笔记整理2022 1.2数据结构三要素——逻辑结构和物理结构与数据运算之间的关系 1.3抽象…

JMeter+提取token变成全局变量

注&#xff1a;没打码&#xff0c;就代码乱写的接口&#xff0c;具体请按照你要跑的接口来输入值 一、创建线程组 二、配置HTTP请求默认值 IP地址一模一样&#xff0c;可以配置一个默认值&#xff0c;就不用每次都输入IP地址了 三、配置登陆ip 配置登陆地址&#xff0c;通过…

iOS 测试 iOS 端 Monkey 测试

说起 Monkey 测试&#xff0c;大家想到的是 monkey 测试只有安卓有&#xff0c;monkey 测试只针对安卓 app&#xff0c;今天给大家分享一下 Monkey 测试在 iOS 端也能跑&#xff01;iOS 端 app 也能使用 Monkey 测试来执行稳定性测试。 一、环境准备 1、准备 Mac 设备&#x…

物业小区管理系统登录页面以及逻辑实现

学习vue3和springboot那肯定是少不了写项目的&#xff0c;在各个项目中肯定是离不开登录和注册的事情的&#xff0c;这也是一个项目起步的需求。 接下来我们来看看我们所写的项目起步。首先搭建vue3和springboot的项目环境&#xff0c;这些搭建大家自行完成即可&#xff0c;架子…

windows 修改 RDP 远程桌面端口号

打开 PowerShell &#xff0c; 执行regedit 依次展开 PortNumber HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Control \Terminal Server \WinStations \RDP-Tcp 右边找到 PortNumber &#xff0c;对应修改自己的端口号 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Co…

深度学习:tf.keras实现模型搭建、模型训练和预测

在sklearn中&#xff0c;模型都是现成的。tf.Keras是一个神经网络库,我们需要根据数据和标签值构建神经网络。神经网络可以发现特征与标签之间的复杂关系。神经网络是一个高度结构化的图&#xff0c;其中包含一个或多个隐藏层。每个隐藏层都包含一个或多个神经元。神经网络有多…

echarts3d饼图实现

一、vue中使用3d饼图 效果图&#xff1a; 二、使用步骤 1.引入库 安装echarts 在package.json文件中添加 "dependencies": {"echarts": "^5.1.2""echarts-gl": "^1.1.0",// "echarts-gl": "^2.0.8&quo…

基于AutoEncoder自编码器的MNIST手写数字数据库识别matlab仿真

目录 1.算法理论概述 2.部分核心程序 3.算法运行软件版本 4.算法运行效果图预览 5.算法完整程序工程 1.算法理论概述 MNIST手写数字数据库是机器学习中常用的数据集&#xff0c;包含了0到9这10个数字的手写图片。本文介绍一种基于AutoEncoder自编码器的MNIST手写数字识别算…

高校大数据教材推荐-Hadoop大数据开发基础(第2版)(微课版)

Hadoop大数据开发基础(第2版)(微课版)是“十四五”职业教育国家规划教材&#xff0c;是大数据应用开发“1X”职业技能等级证书配套系列教材&#xff0c;也是“以纸质教材为核心、以互联网为载体”的新形态教材&#xff0c;配套39个微课视频&#xff08;二维码随扫随学&#xff…

DASCTF 2023 0X401七月暑期挑战赛 Reverse部分题解

文章目录 controlflow1. 异或0x4012. 加i*i3. 异或i*(i1)4. 减i5. 乘36. swap7. judge解题脚本 webserver1.关键函数2. 求约束条件3.Z3求解 controlflow 动态调试观察执行情况 1. 异或0x401 2. 加i*i 3. 异或i*(i1) 注意这里是从data[10i]开始 4. 减i 5. 乘3 6. swap 注意…

redis的简单入门

文章目录 一、前言1.1、什么是Redis? 二、简介三、Redis下载与安装四、Redis服务启动与停止五、Redis设置密码进行远程连接5.1、设置密码5.2、远程连接 六、Redis数据类型七、Redis常用命令7.1、字符串String命令7.2、哈希hash操作命令7.3、列表list操作命令7.4、集合set操作命…

机器人SLAM导航学习-All in one

参考引用 张虎&#xff0c;机器人SLAM导航核心技术与实战[M]. 机械工业出版社&#xff0c;2022.本博客未详尽之处可自行查阅上述书籍 一、编程基础篇 1. ROS 入门必备知识 ROS学习笔记&#xff08;文章链接汇总&#xff09; 2. C 编程范式 《21天学通C》读书笔记&#xff0…

leetcode743. 网络延迟时间 DJ

https://leetcode.cn/problems/network-delay-time/ 有 n 个网络节点&#xff0c;标记为 1 到 n。 给你一个列表 times&#xff0c;表示信号经过 有向 边的传递时间。 times[i] (ui, vi, wi)&#xff0c;其中 ui 是源节点&#xff0c;vi 是目标节点&#xff0c; wi 是一个信…

python_day13

reduceByKey算子&#xff0c;聚合 列表中存放二元元组&#xff0c;元组中第一个为key&#xff0c;此算子按key聚合&#xff0c;传入计算逻辑 from pyspark import SparkConf, SparkContext import osos.environ["PYSPARK_PYTHON"] "D:/dev/python/python3.10…

Geriit使用出错记录

拉取服务器代码&#xff08;clone &#xff09; 1、执行&#xff1a;git clone ssh:xxxxxx && scp -p -P 29418 xxxxxxxxx 1、报错&#xff1a;Unable to negotiate with XX.XX.XX.XX port XX:: no matching key exchange method found. Their offer: diffie-hellman…

第五章 编程之免交互

免交互&#xff1a;不需要人为控制就可以完成的自动化操作&#xff08;自动化运维&#xff09; shell脚本和面交互是一个概念&#xff0c;但是两种写法 shell&#xff1a;默认解释器是bash 使用i/o&#xff08;输入/输出&#xff09;重定向的方式&#xff0c;将命令的列表提供…

pytest钩子函数(二):初始化钩子

前言 pytest这个框架提供了非常多的钩子。通过这些钩子我们可以对pytest 用例收集、用例执行、报告输出等各个阶段进行干预&#xff0c;根据需求去开发对应的插件&#xff0c;以满足自己的使用场景。 01 什么是钩子函数&#xff1f; 钩子函数在pytest称之为Hook函数,它pytes…