Nacos 注册中心和配置中心使用步骤

Nacos 注册中心使用

首先创建一个 nacos-demo ,项目父工程 pom.xml 文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.dong</groupId>
    <artifactId>nacos-demo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>nacos-web</module>
        <module>nacos-web-example</module>
    </modules>

    <!-- Spring boot 版本信息 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.6.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <!-- Environment Settings -->
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- Spring Cloud 版本信息 -->
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        <!--  Spring Cloud Alibaba 版本信息 -->
        <spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
    </properties>

    <dependencies>
        <!-- nacos注册中心依赖包 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- 监控检查-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--springboot-test-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <dependencyManagement>
        <dependencies>
            <!-- Spring Cloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- Spring Cloud Alibaba-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

nacos-web 工程添加配置文件 bootstrap.yml

yml 复制代码
spring:
  application:
    name: nacos-web
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.238.128:8848 # 你的 nacos 服务地址
server:
  port: 9100

#配置 Spring Boot Actuator 端点的部分(访问健康监控状态)
management:
  endpoints:
    web:
      exposure:
        include: "*"

nacos-web 工程添加启动类

java 复制代码
@SpringBootApplication
@EnableDiscoveryClient // 声明它是注册中心的客户端
public class NacosWebApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosWebApplication.class,args);
    }
}

启动后到 nacos 服务列表中查看

Nacos 配置中心使用

在顶级父工程添加依赖

xml 复制代码
<!-- nacos配置中心依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

bootstrap.yml

yml 复制代码
spring:
  application:
    name: nacos-web
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.238.128:8848 # 你的 nacos 服务地址
      config:
        server-addr: 192.168.238.128:8848
        file-extension: yml #指定文件扩展名,默认为properties
server:
  port: 9600

#配置 Spring Boot Actuator 端点的部分(访问健康监控状态)
management:
  endpoints:
    web:
      exposure:
        include: "*"

配置文件名称 : 默认和 spring.application.name一致

文件后缀 :默认是 properties

配置完后点击发布

增加一个 Controller 测试类 InfoController

java 复制代码
package com.dong.nacos.controller;

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

@RestController
public class InfoController {

    @Value("${server.port}")
    private String port;

    @Value("${key:''}")
    private String key;

    @Value("${commonKey:''}")
    private String commonKey;

    @Value("${shareInfo:''}")
    private String shareInfo;

    @GetMapping(value = "/echo/{message}")
    public String echo(@PathVariable(value = "message") String message) {
        return "Hello Nacos Discovery " + message + ", i am from port " + port;
    }

    @GetMapping(value = "/config")
    public String config() {
        return "Hello Nacos Config get "+key +"       getCommonValue:  "+commonKey+"      getShareInfo:  "+shareInfo;
    }
}

重启 nacos-web 服务,测试config接口:http://127.0.0.1:9100/config,结果如下图说明配置成功

动态刷新

Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听到服务端配置发生变化时会实时触发 org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法 。

如果需要对 Bean 进行动态刷新,参照 Spring 和 Spring Cloud 规范。推荐给类添加 @RefreshScope 进行自动刷新

java 复制代码
package com.dong.nacos.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class InfoController {

    @Value("${server.port}")
    private String port;

    @Value("${key:''}")
    private String key;

    @Value("${commonKey:''}")
    private String commonKey;

    @Value("${shareInfo:''}")
    private String shareInfo;

    @GetMapping(value = "/echo/{message}")
    public String echo(@PathVariable(value = "message") String message) {
        return "Hello Nacos Discovery " + message + ", i am from port " + port;
    }

    @GetMapping(value = "/config")
    public String config() {
        return "Hello Nacos Config get "+key +"       getCommonValue:  "+commonKey+"      getShareInfo:  "+shareInfo;
    }
}

多环境支持

nacos可以同时支持多环境配置。只需要在nacos配置中心中根据dataId进行区分即可。dataId 完整的拼接格式如下

bash 复制代码
${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile
  • file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。 目前只支持 properties 类型。

修改 bootstrap.yml

yml 复制代码
spring:
  application:
    name: nacos-web
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.238.128:8848 # 你的 nacos 服务地址
      config:
        server-addr: 192.168.238.128:8848
        file-extension: yml  #指定文件扩展名,默认为properties
        prefix: nacos-web #指定配置文件的前缀
        shared-dataids: common.yml #添加共享配置文件的 dataId,多个以逗号分隔,越靠后,优先级越高
        refreshable-dataids: common.yml #对那些共享配置文件进行动态刷新,多个以逗号分隔
server:
  port: 9100

#配置 Spring Boot Actuator 端点的部分(访问健康监控状态)
management:
  endpoints:
    web:
      exposure:
        include: "*"

新建一个配置文件

访问结果

相关推荐
Cyan_RA95 小时前
SpringMVC @RequestMapping的使用演示和细节 详解
java·开发语言·后端·spring·mvc·ssm·springmvc
用户214118326360213 小时前
Qwen3-Coder 实战!历史人物短视频一键生成,多分镜人物不崩,魔搭直接玩
后端
追逐时光者13 小时前
C#/.NET/.NET Core技术前沿周刊 | 第 54 期(2025年9.8-9.14)
后端·.net
追逐时光者14 小时前
C#/.NET/.NET Core编程技巧练习集,配套详细的文章教程讲解!
后端·.net
AD钙奶-lalala14 小时前
SpringBoot实现WebSocket服务端
spring boot·后端·websocket
moxiaoran575314 小时前
Flask学习笔记(一)
后端·python·flask
你的人类朋友14 小时前
🔒什么是HMAC
后端·安全·程序员
盖世英雄酱5813615 小时前
Read timed out问题 排查
java·数据库·后端
BXCQ_xuan16 小时前
软件工程实践二:Spring Boot 知识回顾
java·spring boot·后端
o0o_-_16 小时前
【go/gopls/mcp】官方gopls内置mcp server使用
开发语言·后端·golang