Springboot2.x 使用 nacos 实现配置管理

参考

环境

环境 版本 操作
windows 10
JDK 11
Springboot 2.3.7.RELEASE
nacos-config-spring-boot-starter 0.2.1 Nacos自2.2.2版本开始,在未开启鉴权时,默认控制台将不需要登录即可访问,同时在控制台中给予提示,提醒用户当前集群未开启鉴权。(2023/12/20)
nacos 0.2.1 下载

介绍

nacos 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

修改数据库配置需要重启服务才能生效(数据库连接池的问题吧)。

本文主要使用的是单机版本下的nacos的配置管理,通过命名空间groupIddataId标识区分实现多配置文件/多租户/多环境使用同一个nacos管理后台。比如日常开发分为 devtestprop 三种步骤,通过设置对应命名空间就可以在单nacos后台管理不同环境下的配置。

nacos 的下载与启动

  1. 前往git主页下载 nacos https://github.com/alibaba/nacos
    image

  2. 下载之后解压,cmd 进入目录 nacos-server-2.1.1\nacos\bin 执行命令启动。

注意事项:

  1. nacos 默认集群模式启动,所以会启动失败,通过指定单机模式来启动。
  2. JAVA_HOME 系统变量如果没设置的话也会报错,需要设置好系统变量。
startup.cmd -m standalone
  1. 命令行显示下图输出即表示启动成功
    image

  2. 访问本地 http://localhost:8848/nacos/#/login 显示登陆界面,默认账号 nacos 密码 nacos
    image

nacos 配置 与 Spring boot 的配置

  1. 在 nacos 中添加命名空间 xiaqiuchu
    image

image

image

  1. 在 nacos 配置管理->配置列表->xiaqiuchu 命名空间添加 dataId 为 xiaqiuchu 的配置,配置完毕后点击发布即可。
    image

image

  1. pom.xml 中添加 nacos 依赖项,版本要与下载的 nacos 版本一致
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.1</version>
        </dependency>
  1. 启动类追加注解 @NacosPropertySource 或 @NacosPropertySources 注解实现绑定
// groupId 如果是 DEFAULT_GROUP 可以不填,因为默认值就是这个
// 指定单个 dataId
// @NacosPropertySource(dataId = "xiaqiuchu", groupId = "DEFAULT_GROUP", autoRefreshed = true)
// 指定多个 dataId
@NacosPropertySources({
        @NacosPropertySource(dataId = "xiaqiuchu", groupId = "DEFAULT_GROUP", autoRefreshed = true),
        @NacosPropertySource(dataId = "example", groupId = "DEFAULT_GROUP", autoRefreshed = true)})
@SpringBootApplication
public class NacosDemoApplication {

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

}
  1. 添加测试控制器,实现 value 获取
package com.xiaqiuchu.nacosdemo.controller;

import com.alibaba.nacos.api.config.annotation.NacosValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author xiaqiuchu
 * @date 2022/9/3
 */
@RestController
public class IndexController {
    @NacosValue(value = "${useLocalCache:false}", autoRefreshed = true)
    private boolean useLocalCache;

    @GetMapping
    public boolean index(){
        return useLocalCache;
    }
}

  1. 在配置文件 application.properties 中指定 命名空间ID 与 nacos 的IP与端口。(命名空间ID不是命名空间名称,不要弄混)
# 单机模式下 nacos IP与端口
nacos.config.server-addr=127.0.0.1:8848
# 指定命名空间,默认public
nacos.config.namespace=dfe52df1-eabc-4601-b985-4b8b72d14e13

测试

  1. 访问 http://localhost:8080/ 访问响应结果为 true ,说明配置生效
    image

  2. nacos 管理界面将配置修改为 useLocalCache=false 并再次访问,配置自动刷新成功
    image

image

image

image

posted @ 2022-09-03 21:08  夏秋初  阅读(761)  评论(0编辑  收藏  举报