SpringCloud-搭建Nacos配置中心

一、Nacos 功能介绍

Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一个分布式服务注册、配置管理,以及服务健康管理平台。在微服务架构中,配置管理是至关重要的一环,Nacos 提供了可靠、动态的配置管理功能,为分布式系统的配置中心提供了便捷的解决方案。

Nacos的主要功能图:

Nacos 除了可以作为服务的注册中心,同样可以作为集中管理配置信息的配置中心来使用。我们通过在 Nacos 的控制台中对配置信息进行修改,可以直接作用到应用,避免应用的重新发布,这个过程叫配置的热更新。

下面我们就来一步一步介绍如何在 Spring Cloud 微服务项目里搭建 Nacos 配置中心。


二、安装 Nacos

Nacos的安装相对简单,首先需要从官方网站下载最新版本的Nacos Server压缩包。解压后,通过执行相应的启动脚本,即可启动Nacos服务。在启动过程中,可以通过修改配置文件来配置Nacos的各项参数,例如数据库配置、端口号等。

可以参考我之前写过的这篇文章:SpringCloud-搭建Nacos服务中心


三、项目引入 Nacos

首先我们准备好或者创建一个微服务项目,如果不会创建,可以参考:

SpringCloud-创建多模块项目

项目准备好之后,我们引入 Nacos,引入注册中心的流程可以参考下面的文章:

SpringCloud-项目引入Nacos

这次,由于我们需要使用到 Nacos 配置管理的功能,所以每个服务模块的 pom.xml 里还需要引入用于 Nacos 配置管理的 jar 包:

<!-- Maven 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>


四、Nacos控制台新建配置

我们访问 Nacos 的控制台页面,Nacos 控制台默认地址是 localhost:8848/nacos,创建配置:

配置起名为:springcloud-provider.yaml,类型选为 YAML 类型,配置内容我们写一个时间格式:

pattern:
    dateformat: yyyy-MM-dd HH:mm:ss

其他内容我们先不写,Namespace 用于指定命名空间来实现环境隔离,Namespace 是最外层的环境,向内依次是 Group 和服务。

点击发布,可以看到这条配置已经显示在控制台了。

创建配置成功,接着,我们要去实现项目读取 Nacos 上的配置。


五、微服务项目读取配置

1、创建bootstrap.yml文件

在 /resource 文件夹下创建 bootstrap.yml 文件,和原先的 application.yml 配置文件平级,并将原先配置文件中的 nacos 配置的部分移动到优先级更高的文件 bootstrap.yml 里。

bootstrap.yml:

server:
  #程序端口号
  port: 8083
spring:
  application:
    name: springcloud-provider
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        file-extension: yaml
        username: nacos
        password: nacos
        server-addr: 127.0.0.1:8848
      discovery:
        server-addr: 127.0.0.1:8848

原先的 application.yml 变成:

management:
  endpoints:
    web:
      exposure:
        #公开所有端点
        include: '*'


2、增加bootstrap.yml的读取依赖

每个想要进行 Nacos 配置管理的服务模块,不仅需要创建 bootstrap.yml 文件,还需要引入能够在项目启动时自动发现并加载 bootstrap.yml 文件的依赖,在 pom.xml 里添加:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>3.0.1</version>
</dependency>

这样在在项目启动时,bootstrap.yml 文件就可以自动被发现并加载了。


3、编写读取配置信息的接口

在 Spring Cloud 项目中,我们可以通过注入 @Value 注解来读取 Nacos 中的配置信息。

创建 ConfigController 类:

package com.example.springcloudprovider.demos.web;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {

    @Value("${pattern.dateformat}")
    private String dateformat;

    @GetMapping("dateformat")
    public String now(){
        return dateformat;
    }

}


4、测试读取配置信息

启动项目,访问测试接口:localhost:8083/config/dateformat

可以看到我们在 Nacos 上配置的日期格式已经被加载到项目里了。


六、测试Nacos对配置热更新

1、修改Nacos上配置内容

我们在 Nacos 控制台里修改配置,将 dateformat 改为 yyyy-MM-dd HH:mm:ssss


2、查看项目内配置是否更新

再次访问测试接口:localhost:8083/config/dateformat

可以看到我们的项目配置已经被热更新了,即配置实时更新,不需要重新启动或部署项目。


相关文章

  • SpringBoot底层原理

    springboot3.x中,META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中,配置了需要创建Bean对象的全类名。当Springboot项目启动后,Springboot中的一些配置类,bean对象就会自动存入到IOC容器中,不需要我们手动去申明。,它负责管理Spring应用程序中所有的bean,同时提供了一些方法来获取Bean,注册Bean,是整个Spring应用的核心。

  • SQL实现模糊查询的四种方法总结

    SQL实现模糊查询的四种方法总结

  • Spring两大核心思想:IOC和AOP

    1.先自定义一个注解@Target(ElementType.METHOD) //作用范围 此处是方法@Retention(RetentionPolicy.RUNTIME) //生命周期 此处是运行时2.在切点表达式中加入该注解@Aspect@Component@Slf4j@Around(&quot;@annotation(com.example.demo.aspect.TestAnnotation)&quot;) //此处加自定义注解log.info(&quot;around继续&quot;);try {

  • C#使用重载方法实现不同类型数据的计算

    为了避免异常,可以先使用Decimal.Parse(string)方法将字符串转换为小数,然后再使用Convert.ToInt32(decimal)方法将小数转换为整数。如果一个类中存在两个以上的同名方法,并且方法的参数类型、个数或者顺序不同,当调用这样的方法时,编译器会根据传入的参数自动进行判断,决定调用哪个方法。例如,字符串是&quot;123.456&quot;,包含非数字字符&quot;.&quot;。重载方法就是方法名称相同,但是每个方法中参数的数据类型、个数或顺序不同的方法。如果字符串包含非数字字符,例如小数点,该方法将引发异常。

  • 小程序 自定义组件和生命周期

    类似vue或者react中的自定义组件⼩程序允许我们使⽤⾃定义组件的⽅式来构建⻚⾯。类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成可以在微信开发者⼯具中快速创建组件的⽂件结构在⽂件夹内 components/myHeader ,创建组件 名为 myHeader⾸先要在⻚⾯的 json ⽂件中进⾏引⽤声明。还要提供对应的组件名和组件路径index.wxml// 引用声明// 要使用的组件的名称 // 组件的路径&lt; view &gt; _微信小程序 自定义组件生命周期

  • Java把列表数据导出为PDF文件,同时加上PDF水印

    可以看到字体文件在jar目录下面是有的,但是发现classes后面多了个叹号。这是引入外部字体方式不对,后改用问题2参考文章的第三种写法就没问题了。网上都是说jar包的版本不对,导致的字体兼容性问题。换了jar包版本发现没效果,后来索性直接把字体下载到本地直接引入。字体文件资源自己百度,直接搜。

  • HarmonyOS 鸿蒙应用开发( 六、实现自定义弹窗CustomDialog)

    自定义弹窗(CustomDialog)可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。

  • java获取双异步返回值时,如何保证主线程不阻塞?

    CompletableFuture的异步执行通过ForkJoinPool实现,ForkJoinPool在于可以充分利用多核CPU的优势,把一个任务拆分成多个小任务,把多个小任务放到多个CPU上并行执行,当多个小任务执行完毕后,再将其执行结果合并起来。

  • Vue3前端开发,如何获取组件内dom对象以及子组件的属性和方法

    传统的vue2里面,我们访问dom时的代码,还是的借助于this对象的【this.$refs.userName】。毕竟,父子组件之间,各司其职。下面展示的是,借助于ref来访问子组件的实例对象。(声明:默认情况下,子组件内部的属性和方法,不会主动对外暴漏的。Vue3前端开发,借助Ref来获取组件内dom对象,借助defineExpose编译宏可以获取到子组件的属性和方法。如图,确实是可以拿到子组件的属性和方法了,如果不使用编译宏,是访问不到的。这个是子组件里面的内容,我们定义了一个常量,一个方法。

  • 掌握Spring MVC拦截器整合技巧,实现灵活的请求处理与权限控制!

    在这个方法中可以通过返回值来决定是否要进行放行,我们可以把业务逻辑放在该方法中,如果满足业务则返回true放行,不满足则返回false拦截。方法,如果返回true,则代表放行,会执行原始Controller类中要请求的方法,如果返回false,则代表拦截,后面的就不会再执行了。(7)如果满足规则,则进行处理,找到其对应的controller类中的方法进行执行,完成后返回结果。配置多个后,执行顺序是什么?(5)在找到具体的方法之前,我们可以去配置过滤器(可以配置多个),按照顺序进行执行。

  • Java编程模型:VO,BO,PO,DO,DTO

    Java编程模型中的VO,BO,PO,DO,DTO提供了一种结构化和组织代码的方法。通过合理运用这些概念,可以使代码更具可读性、可维护性和可扩展性。在实际项目中,根据需求和架构设计,合理选择和运用这些概念将有助于构建清晰、高效的Java应用程序。