SpringCloud篇(配置中心 - Nacos)

微服务(五)nacos配置管理 1 统一配置管理 1.1 nacos中添加配置文件 注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。基本不会变更的一些配置还是保存在微服务本地比较好。 1.2 从微服务拉取配置 微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。 但如果尚未读取application.yml,又如何得知nacos地址呢? 因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之 阅读详情
AI摘要

本文详细介绍了如何在SpringCloud项目中使用Nacos作为配置中心,包括统一配置管理、配置热更新以及配置共享的实现方法。通过引入nacos-config依赖、配置bootstrap.yaml文件,微服务能够从Nacos拉取配置并实现热更新,同时介绍了如何设置环境共享配置以及配置共享的优先级。

目录

一、Nacos 配置中心

1. 统一配置管理

1.1. 在nacos中添加配置文件

1.2. 从微服务拉取配置

1.2.1. 引入nacos-config依赖

1.2.2. 添加bootstrap.yaml

1.2.3. 读取nacos配置

1.2.4. 页面访问

2. 配置热更新:两种

2.1. 方式一

2.2. 方式二

3. 配置共享

3.1. 添加一个环境共享配置

3.2. 在user-service中读取共享配置

3.3. 运行两个UserApplication,使用不同的profile

3.4. 配置共享的优先级


一、Nacos 配置中心

Nacos配置管理:Nacos除了可以做注册中心,同样可以做配置管理来使用。

1. 统一配置管理

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错,

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。

1.1. 在nacos中添加配置文件

如何在nacos中管理配置呢?

然后在弹出的表单中,填写配置信息:

注意:项目的核心配置,需要热更新的配置才有放到nacos管理的必要。

基本不会变更的一些配置还是保存在微服务本地比较好。

1.2. 从微服务拉取配置

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

但如果尚未读取application.yml,又如何得知nacos地址呢?

因此spring引入了一种新的配置文件:bootstrap.yml文件,会在application.yml之前被读取,流程如下:

1.2.1. 引入nacos-config依赖

首先,在user-service服务中,引入nacos-config的客户端依赖:

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>

    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

</dependency>
1.2.2. 添加bootstrap.yaml

然后,在user-service中添加一个bootstrap.yaml文件,内容如下:

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev #开发环境,这里是dev 
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

这里会根据spring.cloud.nacos.server-addr获取nacos地址,再根据

{spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为文件

id,来读取配置。

本例中,就是去读取userservice-dev.yaml:

1.2.3. 读取nacos配置

在user-service中的UserController中添加业务逻辑,读取pattern.dateformat配置:

完整代码:

package com.cloud.user.web;

import com.cloud.user.pojo.User;
import com.cloud.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Value("${pattern.dateformat}")
    private String dateformat;
    
    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }
    // ...略
}
1.2.4. 页面访问

在页面访问,可以看到效果:

访问地址:https://localhost:8082/user/now

2. 配置热更新:两种

我们最终的目的,是修改nacos中的配置后,微服务中无需重启即可让配置生效,也就是配置热更新

要实现配置热更新,可以使用两种方式:

2.1. 方式一

在@Value注入的变量所在类上添加注解@RefreshScope:

2.2. 方式二

使用@ConfigurationProperties注解代替@Value注解。

在user-service服务中,添加一个类,读取patterrn.dateformat属性:

package com.cloud.user.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

在UserController中使用这个类代替@Value:

完整代码:

package com.cloud.user.web;

import com.cloud.user.config.PatternProperties;
import com.cloud.user.pojo.User;
import com.cloud.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @Autowired
    private PatternProperties patternProperties;

    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
    }

    // 略
}

3. 配置共享

其实微服务启动时,会去nacos读取多个配置文件,例如:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

而 [spring.application.name].yaml 不包含环境,因此可以被多个环境共享。

下面我们通过案例来测试配置共享

3.1. 添加一个环境共享配置

我们在nacos中添加一个userservice.yaml文件:

3.2. 在user-service中读取共享配置

在user-service服务中,修改PatternProperties类,读取新添加的属性:

在user-service服务中,修改UserController,添加一个方法:

3.3. 运行两个UserApplication,使用不同的profile

修改UserApplication2这个启动项,改变其profile值:

这样,UserApplication(8081)使用的profile是dev,UserApplication2(8082)使用的profile是test。

启动UserApplication和UserApplication2

访问http://localhost:8081/user/prop,结果:

访问http://localhost:8082/user/prop,结果:

可以看出来,不管是dev,还是test环境,都读取到了envSharedValue这个属性的值。

3.4. 配置共享的优先级

当nacos、服务本地同时出现相同属性时,优先级有高低之分:

Nacos的配置中心 Nacos作为一个功能强大的服务发现和配置管理平台,不仅提供了注册中心和负载均衡的功能,还充当了配置中心的角色。 阅读详情

相关推荐

Spring Cloud 整合 Nacos 的详细教程

Spring Cloud 整合 Nacos 的详细教程

一个想交朋友的陌生人 3973

SpringCloud - Nacos详解

1、概述 服务发现是微服务架构体系中最关键的组件之一。如果尝试用手动的方式来给每一个客户端来配置所有服务提供者的服务列表是一件非常困难的事,而且也不利于服务的动态扩缩容。 Nacos Discovery 可以帮助您将服务自动注册到 Nacos 服务端并且能够动态感知和刷新某个服务实例的服务列表。 除此之外,Nacos Discovery 也将服务实例自身的一些元数据信息-例如 host,port, 健康检查URL,主页等内容注册到 Nacos。 2、注册中心原理 在使用注册中心时,一共有三种角色:服务提供者

java123456111的博客 2万+

Spring Cloud2024.x实战 | nacos系列 | 第2篇: springcloud整合配置中心nacos2.5.1

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如。配置项,使用的 Nacos 配置集的 dataId,默认为。

zhuzhongji的博客 1583

【Springcloud】Nacos配置中心和服务中心

(1)服务发现机制就是通过一个中间件去记录服务提供者的ip地址,服务名以及心跳等数据(比如用mysql去存储这些信息,所以Nacos要配置持久化),然后服务消费者会去这个中间平台去查询相关信息,然后再去访问对应的地址,这就是服务注册和服务发现。(2)当用户地址发生了变化也没有影响,因为服务提供方修改了用户地址,在中间件中会被更新,当服务消费方去访问中间件时就能及时获取最新的用户地址,就不会出现用户地址发生变化导致服务找不到什么是Nacos(2)下载安装搭建NacosServerNacos下载。

weixin_44823875的博客 6334

爬取信用中国里面的行政处罚

result字段名为行政处罚文书号、处罚决定日期、处罚内容、处罚金额、违法事实、处罚机关、公司名称,行政处罚次数。file_path=r'E:\Data analyze\python\行政处罚爬虫/'#路径需要按实际修改。writer = pd.ExcelWriter('统计.xlsx')# 写入Excel文件。src_workbook=file_path+r'行政处罚(名单).xls' #表格名称也要更改。# keyword = input("输入爬取的公司全称必须是全称")

qq_42863025的博客 1674

【鸿蒙南向开发】OpenHarmony——分布式数据对象之功能实践

通过本文的学习可了解到分布式数据对象的主要接口、大致调用方法和功能实现等。结合对应内容,可以进一步对分布式数据对象同步机制做深度学习。下一步,(1) 着重理解同步组网的构建原理。(2) 着重理解同步组网内,监听change和status变化的实现。●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。

HarmonyOS_666的博客 1089

SpringCloud实战之路 | 应用篇(九)Spring Cloud Alibaba注册中心+配置中心Nacos

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos就是注册中心+配置中心的组合,简单对比来说官⽹:https://nacos.io 下载地址:https://github.com/alibaba/Nacos。

零一的博客 763

Android Camera性能优化概述

做camera性能优化方面的工作有几年了,想写一篇文章简单介绍一下其中涉及到的具体技术,这篇文章会大概介绍一下涉及到的技术。

weixin_42136255的博客 4023

03-12、SpringCloud Alibaba第十二章,升级篇,服务注册与配置中心Nacos

springCloud 服务注册 配置中心 Nacos

记录自我学习的过程 1200

STM32内存大小与地址的对应关系以及计算方法

1、概述 在计算机中要访问存储区,都是通过地址来进行访问的,包括所有的外设(比如串口、内存、硬盘等),都对应有一个访问地址,地址就相当于门牌号,有了门牌号,我们才知道操作的是哪一个区域、哪一个外设。 最被大家熟知的是计算机内存,计算机内存有4G、8G,16G等等,对于程序员而言,要在代码中操作这些内存,肯定得知道内存的地址,此外,还需要会计算地址与内存大小的计算方法与对应关系。STM32作为微

Ace's Blog 4万+

手把手教你配置SAP PP供应区域(Supply Area):实现线边仓精准发料与物料流优化

本文详细解析了SAP PP供应区域(Supply Area)的配置方法,帮助企业实现线边仓精准发料与物料流优化。通过三级优先级逻辑和四步配置法,系统可自动识别最优组件来源位置,显著提升生产订单处理效率和库存准确率。文章还提供了典型问题解决方案和性能优化技巧,适用于离散制造和重复制造场景。

weixin_29275257的博客 433
上一篇: SpringBoot3+Springdoc:v3api-docs可以访问,html无法访问的解决方法
下一篇: SQL美化器:sql-beautify安装与配置完全指南
AIGC镜像空间
博客等级 码龄5年 4万+粉丝 689原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值