Nacos实现分布式配置

概述

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
浏览器重新访问
修改后的信息同步更新,同时应用控制台也输出修改后的信息
控制台修改后信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值