Nacos实现分布式配置

导读:本篇文章讲解 Nacos实现分布式配置,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

概述

Nacos提供用于存储配置和其他元数据的key/value存储,为分布式系统中的外部化配置提供服务器端和客户端支持,使用Nacos可以替换Config作为分布式配置中心。
首先配置好Nacos运行环境,不清楚的小伙伴可以访问Nacos服务在win10上安装和启动

引入依赖包

新建多模块项目,在父项目pom.xml文件中加入依赖

<properties>
    <java.version>1.8</java.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
    <spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <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>

在父项目下新建alibaba-nacos-config子项目,引入依赖

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
   </dependency>
   <dependency>
       <groupId>com.alibaba.cloud</groupId>
       <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-configuration-processor</artifactId>
       <optional>true</optional>
   </dependency>
</dependencies>

yml配置文件

配置文件有bootstrap和application,这是因为在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动,在SpringBoot项目中配置文件的加载是bootstrap优先于application

spring:
  application:
    name: alibaba-nacos-config #应用名
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定文件格式

添加Nacos配置

点击“配置列表”右侧“+”号
新增配置
跳转到新建页面后,填写下面信息
新建配置信息
其中,Data ID由应用名(alibaba-nacos-config) + 文件后缀名(.yaml)组成,配置信息填写后,点击“发布”即可。
发布成功后,在配置列表会有一条配置信息,如下:
配置信息

添加读取Nacos Config实现

@SpringBootApplication
public class ConfigApplication {

    @Value("${user.name}")
    private String userName;
    @Value("${user.age}")
    private int userAge;

    @PostConstruct
    public void init() {
        System.out.printf("[init] user name:%s, age:%d%n", userName, userAge);
    }
    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }
}

启动Nacos Config应用

运行启动类ConfigApplication,注意观察控制台信息
控制台日志信息

使用Nacos Config实现Bean动态刷新

Nacos Config支持标准Spring Cloud @RefreshScope特性,当配置内容变化时,Refresh Scope Beans中的绑定配置的属性将有条件的更新。此处的条件指Bean必须满足:
必须条件:Bean的声明类必须标注@RefreshScope
二选一条件
属性(非static字段)标注@Value
@ConfigurationProperties Bean

使用Nacos Config实现Bean @Value属性动态刷新

在启动类ConfigApplication上增加@RefreshScope和@RestController使得该启动类变成Spring MVC REST控制器,同时具备动态刷新能力

@RefreshScope
@RestController
@SpringBootApplication
public class ConfigApplication {

    @Value("${user.name}")
    private String userName;
    @Value("${user.age}")
    private int userAge;

    @PostConstruct
    public void init() {
        System.out.printf("[init] user name:%s, age:%d%n", userName, userAge);
    }
    @RequestMapping("/user")
    public String user() {
        return String.format("[HTTP] user name:%s, age:%d", userName, userAge);
    }
    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }
}

重新启动ConfigApplication类,控制台输出如下信息:
控制台日志
浏览器输入http://localhost:8001/user
浏览器信息
在Nacos控制台修改alibaba-nacos-config.yaml配置信息,将年龄18修改为20,点击发布后,观察应用控制台日志变化
日志变化
浏览器重新访问http://localhost:8001/user
浏览器重新访问
修改后的信息同步更新,同时应用控制台也输出修改后的信息
控制台修改后信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76826.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!