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

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

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 = "") 注解

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

比如我的配置文件如图。

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

那么我们来测试一下是否为热更新:

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

然后随便写个测试方法:

发请求:

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

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

然后再发一次请求:

可以看到发生变化了。

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值