Spring项目将配置文件移至nacos上,实现统一配置和热更新

本文介绍了如何使用Nacos进行微服务的统一配置管理,包括创建新配置、引入Nacos-config依赖、配置文件命名规则以及配置文件的热更新机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当微服务部署的实例越来越多,达到数十、数百时,逐个修改配置就会很烦 主要还很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。

nacos就提供了这种功能,而且可以实现配置的热更新。

一、先在nacos上创建新配置

先进到nacos的管理页面。

开始写配置文件:

Data ID格式统一按照这个格式来: 服务名 - 环境 . 后缀名。

主要是因为后面要导入的bootstrap.yaml Spring默认的读取格式就是这样的。 所以我们按着约定来,会省下很多事情。

剩下的东西自己看着选就好了。 

二、引入nacos-config依赖

在我们需要将配置文件上nacos的服务的pom文件中引入如下依赖:

<!--nacos配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

Spring引入了一种新的配置文件:bootstrap.yaml 

它的读取流程如下:

 启动项目 --> 读取bootstrap.yaml文件 --> 找到nacos中,对应的配置文件 --> 读取本地 application.yaml文件 ---> 创建容器 加载bean ...

因此,我们需要在bootstrap.yaml文件中放入nacos的地址和基本信息。

bootstrap.yaml:

#动态服务
spring:
  profiles:
    # 开发环境: 开发->dev, 测试->test, 生产->prod
    active: dev

  application:
    # 服务名称
    name: user-service
  cloud:
    nacos:
      config:
        # Nacos地址
        server-addr: localhost:8848
        # 对应分组: 开发->dev, 测试->test, 生产->prod
        group: dev
        # 文件后缀
        file-extension: yaml
        # 命名空间id
        namespace: 7d3fe058-f389-4c1f-ae60-e48fd1d309b2

它会根据配置文件中的 spring.cloud.nacos.server-addr 获取nacos地址

然后按着

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

来获得配置文件名。所以前面才让大家按着那个规范来命名 Data ID

另外,不同的版本可能配置文件上会有一些些的差异。

我的Spring版本是:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.9.RELEASE</version>
    <relativePath/>
</parent>

三、配置热更新

创建一个实体类:

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class OssProperties {

    private String accessKey;

    private String secret;
}

这是我们很常用的oss对象存储的部分实体类。

关键在于 @ConfigurationProperties(prefix = "") 注解

这里注意一下:

 @ConfigurationProperties 注解默认情况下是不会自动刷新的(需要手动触发或重启应用)

但与SpringCloud的@RefreshScope或Nacos的监听机制结合,可以实现动态更新。

如果使用的是 Spring Cloud Alibaba Nacos Config,默认情况下,Nacos 的配置变更会自动触发 @ConfigurationProperties 的重新绑定(无需 @RefreshScope),但需满足:

  • 配置类是 Spring 管理的 Bean(如 @Component)。

  • 有对应的 setter 方法(因为绑定是通过 setter 注入的,我们这里是用的lombok的data注解)。

    里面放的是配置文件中的每个标题  ":" 冒号则用 "." 代替,它会自动将相同的字段名映射上。

    比如我的配置文件如图。

    代码中是:则OssProperties的实体类的 secret 就会自动变成 YsF... 这一段。

    四、简单测试一下:

    测试很简单。直接输出就好了:

    然后随便写个测试方法:

    发请求:

    debug一下,可以看到accessKey是 KTAI5 ... 

    然后我们现在放行。去修改一下nacos上的文件,保存。

    然后再发一次请求:

    可以看到发生变化了。

    好了 这篇文章就先到这了。希望能对大家有帮助。

    评论 2
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值