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: "*"

新建一个配置文件

访问结果

相关推荐
罗政2 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
拾光师3 小时前
spring获取当前request
java·后端·spring
Java小白笔记5 小时前
关于使用Mybatis-Plus 自动填充功能失效问题
spring boot·后端·mybatis
JOJO___7 小时前
Spring IoC 配置类 总结
java·后端·spring·java-ee
白总Server7 小时前
MySQL在大数据场景应用
大数据·开发语言·数据库·后端·mysql·golang·php
Lingbug9 小时前
.Net日志组件之NLog的使用和配置
后端·c#·.net·.netcore
计算机学姐9 小时前
基于SpringBoot+Vue的篮球馆会员信息管理系统
java·vue.js·spring boot·后端·mysql·spring·mybatis
好兄弟给我起把狙9 小时前
[Golang] Select
开发语言·后端·golang
程序员大金9 小时前
基于SpringBoot+Vue+MySQL的智能物流管理系统
java·javascript·vue.js·spring boot·后端·mysql·mybatis
ac-er888810 小时前
在Flask中处理后台任务
后端·python·flask