Nacos Config的多环境(Profile)配置信息读取

简介: 读取`Profile`多环境下`Nacos Config`的配置信息,了解多环境下相同的配置优先级加载问题。

本章目标

读取Profile多环境下Nacos Config的配置信息,了解多环境下相同的配置优先级加载问题。

在之前文章中我们学习到了SpringCloud Alibaba读取Nacos Config内定义的propertiesYaml类型的配置文件信息,并且使用Nacos Console进行修改配置信息后可以在应用程序内实时更新。

在我之前的SpringBoot系列教程中有提到Profile(多环境)相关的概念,有兴趣的同学可以去查看{% post_path springboot-active-profiles 激活项目配置的多环境(profiles) %}文章,既然应用程序存在Profile分离的概念, Nacos Config同样为我们提供了这一概念,接下来我们来看看是如何进行Profile的配置信息切换使用优先级替换

快速入门

我们还是先来通过Nacos Console来添加本章所使用的配置信息,要注意配置的后缀名改为yaml

Nacos Server

需要在本地安装Nacos Server才能完成本章的内容讲解,具体的安装步骤访问Nacos 官方文档

添加配置

通过Nacos控制台添加本项目所使用的配置信息,之前又讲到过SpringCloud Alibaba默认使用spring.application.name作为DATA-ID,本章的spring.application.name = hengboy-spring-cloud-config-profile,所以我们添加如下两个配置信息:

  • hengboy-spring-cloud-config-profile.yaml

    这个配置是不参与任何profile环境的基础配置,其定位其实跟application.yml差不多。
  • hengboy-spring-cloud-config-profile-dev.yaml

    这个配置则是profile=dev环境的配置信息,其定位跟application-dev.yml差不多。

创建应用

通过idea开发工具来创建一个SpringCloud项目,并添加SpringCloud 版本依赖SpringCloud Alibaba 版本依赖pom.xml配置内容如下所示:

//...
<properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
        <spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version>
    </properties>

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

    <dependencyManagement>
        <!--SpringCloud-->
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringCloud Alibaba-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
//...

配置bootstrap.yml

之前有说过,SpringCloud Alibaba所需要的配置信息,需要在引导配置bootstrap.yml文件内添加,如下所示:

# application name
spring:
  application:
    name: hengboy-spring-cloud-config-profile
  # profile
  profiles:
    active: dev
  # nacos config
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        # nacos配置扩展类型为yaml
        file-extension: yaml

我们本章用到的配置文件的格式为yaml所以需要通过spring.cloud.nacos.config.file-extension进行配置,该参数默认为properties

读取配置

我们创建一个SpringMvc Controller来读取配置信息,ConfigController如下所示:

//...
@RestController
@RequestMapping(value = "/config")
@RefreshScope
public class ConfigController {
    /**
     * 读取data-id对应的配置信息
     */
    @Value(value = "${hengboy.name:}")
    private String name;

    @RequestMapping(value = "/get")
    public String getConfig() {
        return this.name;
    }
}

运行测试

通过Application方式启动应用程序后,打开终端访问通过如下命令行:

curl -X GET http://localhost:8080/config/get
输出内容:xxx-xxx-dev

看到输出内容你应该会感觉到不可思议,按照我们之前说的这里应该去找spring.application.name所对应的配置信息,也就是hengboy-spring-cloud-config-profile.yaml的配置信息,在上面步骤中我们在hengboy-spring-cloud-config-profile.yaml内添加的配置信息不是xxx-xxx-dev而是xxx-xxx-xx

多环境配置的优先级

上面出现的情况,其实一点也不奇怪,Nacos Config所被应用到SpringBootSpringCloud项目时,如果项目内存在Profile多环境的配置,就会自动去找spring.profile.actives所激活的profile配置文件,如下所示:

# 激活dev profile时
spring.profile.actives=dev -> hengboy-spring-cloud-config-profile-dev.yaml

我们激活spring.profile.actives=dev时,Nacos Config会自动去找两个配置文件,分别是:hengboy-spring-cloud-config-profile.yamlhengboy-spring-cloud-config-profile-dev.yaml

这也就对应上面说的application配置文件与Nacos Config配置文件的对应关系:

# 默认的配置
application.yml -> hengboy-spring-cloud-config-profile.yaml
# 激活profile=dev的配置
application-dev.yml -> hengboy-spring-cloud-config-profile-dev.yaml

我们之前在学习SpringBoot时讲到过,profile多环境下的配置如果与默认配置(application.yml)相同时会自动被覆盖掉,如下所示:

# application.yml
server:
    port: 8000
spring:
    profile:
        actives: dev
# application-dev.yml
server:
    port: 9000
根据上面的额配置的项目,在启动时会使用 9000作为启动端口。

Nacos Config也是同样的概念设计,这一点可能是不想改变太多相关SpringBoot、SpringCloud的习惯,让开发者更方面的集成使用。

结论

根据上面的解释,我们在访问/config/get时你就明白为什么返回的是xxx-xxx-dev了。

相关文章
|
7月前
|
存储 Kubernetes 安全
Nacos-Controller 2.0:使用 Nacos 高效管理你的 K8s 配置
无论是使用 Nacos-Controller 实现配置的双向同步,还是直接在应用中接入 Nacos SDK 以获得更高级的配置管理特性,都能显著提升配置管理的灵活性、安全性和可维护性。使用 Nacos,您能够更好地管理和优化您的应用配置,从而提高系统的稳定性和可靠性。
670 49
|
11月前
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
1864 82
高效搭建Nacos:实现微服务的服务注册与配置中心
|
11月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
1103 148
|
7月前
|
存储 人工智能 测试技术
Nacos托管LangChain应用Prompts和配置,助力你的AI助手快速进化
AI 应用开发中,总有一些让人头疼的问题:敏感信息(比如 API-KEY)怎么安全存储?模型参数需要频繁调整怎么办?Prompt 模板改来改去,每次都得重启服务,太麻烦了!别急,今天我们就来聊聊如何用 Nacos 解决这些问题。
|
监控 Java 测试技术
Nacos 配置中心变更利器:自定义标签灰度
本文是对 MSE Nacos 应用自定义标签灰度的功能介绍,欢迎大家升级版本进行试用。
1090 213
|
9月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
3919 14
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
206 5
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
618 1
Nacos配置中心
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
263 4
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
226 3

热门文章

最新文章

下一篇
oss云网关配置