前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nacos入门指南04 - 分布式配置实践

Nacos入门指南04 - 分布式配置实践

原创
作者头像
dys
修改2020-11-02 10:45:38
7110
修改2020-11-02 10:45:38
举报
文章被收录于专栏:性能与架构性能与架构

你好,欢迎阅读,本文是系列文章中的第4篇。

Part1 - Nacos 是什么?

Part2 - Nacos 环境搭建

Part3 - Nacos 服务发现实践

Part4 - Nacos 分布式配置实践

本文目的是使用 Nacos 管理服务的配置。

步骤:

(1)创建一个 SpringBoot 服务,使用本地配置方式。

(2)Nacos 中创建配置。

(3)SpringBoot 服务整合 Nacos,改为使用 Nacos 中的配置。

(4)实现配置动态刷新。

1. 创建服务

pom.xml

代码语言:txt
复制
...
  <parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.5.RELEASE</version>
		<relativePath/> 
	</parent>
	<groupId>com.example</groupId>
	<artifactId>configdemo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>configdemo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>11</java.version>
	</properties>

	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 加依赖 nacos-config -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
	</dependencies>

    <dependencyManagement>
        <dependencies>
            <!-- spring cloud 依赖管理 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- spring cloud alibaba 依赖管理 -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
...

添加配置(application.yaml):

代码语言:txt
复制
test:
  name: local-config

添加一个测试接口,用于输出配置值:

代码语言:txt
复制
...
@RestController
public class TestController{
    @Value("${test.name}")
    private String test_name;

    @GetMapping("/test")
    public String testpriority(){
        return test_name;
    }
}

启动后访问:

http://localhost:8080/test

效果:

成功输出了本地配置。

2. Nacos 中新建配置

进入 Nacos 控制的配置列表页面:

点击新建配置的按钮,在新建配置页面添加:

Data ID 项填写服务名 configdemo.yaml,配置格式选择 YAML,配置内容中填写:

代码语言:txt
复制
test:
  name: nacos-config

这里把配置的值改为了 “nacos-config”,用于与之前的 "local-config" 作为区分,然后点击页面底部的发布按钮。

回到配置列表页面,即可看到刚刚新建的配置:

3. 服务整合 Nacos 配置

Nacos 配置的依赖在第一步已经添加好了,下面主要是修改配置。

首先,把之前的 application.yaml 文件名改为 bootstrap.yaml,这是因为 bootstrap.yaml 的优先级是最高的。

然后,在 bootstrap.yaml 中添加配置:

代码语言:txt
复制
spring:
  application:
    name: configdemo
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml

注意,现在服务本地配置文件中已经没有 "test.name" 这个配置项了。

重新启动服务,在启动日志中会看到如下提示:

再次刷新页面:

此次输出的值为 Nacos 中配置的 "nacos-config",说明已经成功读取了 Nacos 中的配置信息。

现在需要说明一下服务为什么可以自动找到 Nacos 中的配置文件

服务启动时,会读取 bootstrap.yaml 中指定的 nacos config 服务器地址,然后根据 spring.application.name 配置项的值与 spring.cloud.nacos.config.file-extension 的值构造出 Data ID,由此就可以读取到 Nacos 中的配置文件了。

4. 动态刷新

如果希望在 Nacos 修改配置之后,实例可以动态获取最新值,则需要添加一个注解 @RefreshScope

代码如下:

代码语言:txt
复制
@RefreshScope
@RestController
public class TestController{
    @Value("${test.name}")
    private String test_name;

    @GetMapping("/test")
    public String testpriority(){
        return test_name;
    }
}

重新启动服务。

下面在 Nacos 控制台修改配置:

在现有值的后面添加了字符串 “-new”,以作为区分:

然后点击页面底部的发布按钮,点击后,会弹出新旧配置对比窗口:

确认无误后,点击确认发布按钮。

这样配置就修改完成了,下面刷新页面:

可以看到,已经变成了刚刚修改后的值。

注意,修改配置后可没有重启服务,说明已经成功实现了配置的动态刷新。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 创建服务
  • 2. Nacos 中新建配置
  • 3. 服务整合 Nacos 配置
  • 4. 动态刷新
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com