SpringCloud Alibaba - Nacos 作为配置中心 & 读取Properties配置信息

简介: SpringCloud Alibaba是阿里巴巴致力于对微服务的管理、配置、注册等一整套的解决方案。简介Nacos 提供用于存储配置和其他元数据的 K-V 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。

SpringCloud Alibaba阿里巴巴致力于对微服务管理配置注册等一整套的解决方案。

简介

Nacos 提供用于存储配置和其他元数据的 K-V 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。

Nacos Config支持多种方式的配置格式,比如:TEXTJSONXMLYAMLHTMLPROPERTIES等。
我们本章先来看下是怎么读取Properties类型的配置。

前提

本地需要安装Nacos Server,具体安装步骤访问Nacos官网文档,Nacos Server 安装

创建项目

使用idea工具创建一个SpringCloud项目。

添加依赖

添加依赖在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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--alibaba nacos config-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <!--SpringCloud-->
            <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引导配置

Nacos Config相关的配置必须在bootstrap.yml或者bootstrap.properties文件内添加。
配置内容如下所示:

spring:
  application:
    name: alibaba-nacos-config-client
  # nacos config  
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
  • spring.application.name

spring-cloud-starter-alibaba-nacos-config依赖默认会使用该值的内容作为DATA-ID来匹配读取Nacos Config,读取规则下面介绍。

  • spring.cloud.nacos.config.server-addr

配置nacos server的地址信息,nacos server本地安装访问Nacos Server 安装

读取Nacos配置

在启动类内添加读取Nacos Config部分代码,为了跟下一步做铺垫来测试自动更新,我们间隔1秒后再次读取配置内容,编码如下所示:

/**
 * Nacos Config Properties方式
 *
 * @author:恒宇少年 - 于起宇
 * <p>
 * DateTime:2019-03-01 11:20
 * Blog:http://blog.yuqiyu.com
 * WebSite:http://www.jianshu.com/u/092df3f77bca
 * Gitee:https://gitee.com/hengboy
 * GitHub:https://github.com/hengyuboy
 */
@SpringBootApplication
public class SpringCloudAlibabaNacosConfigPropertiesApplication {
    /**
     * logger instance
     */
    static Logger logger = LoggerFactory.getLogger(SpringCloudAlibabaNacosConfigPropertiesApplication.class);

    public static void main(String[] args) throws Exception {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringCloudAlibabaNacosConfigPropertiesApplication.class, args);
        while (true) {
            //当动态配置刷新时,会更新到 Enviroment中,因此这里每隔一秒中从Enviroment中获取配置
            String userName = applicationContext.getEnvironment().getProperty("hengboy.name");
            String userAge = applicationContext.getEnvironment().getProperty("hengboy.age");
            logger.info("配置信息,名称:{},年龄:{}", userName, userAge);
            TimeUnit.SECONDS.sleep(1);
        }
    }
}

测试

接下来我们来测试是否可以从Nacos Config内读取相关的配置信息,我们需要访问Nacos Console控制台来添加配置信息。
访问:Nacos Console,默认用户名/密码为:nacos/nacos

添加 Nacos Config

通过配置列表内添加配置信息,添加时DATA-ID的组成部分为:{spring.application.name}.{file-extension}
file-extension文件后缀名默认为properties,如果需要修改,在bootstrap文件内进行修改配置spring.cloud.nacos.config.file-extension的值。
添加的配置信息如下所示:

DATA ID : alibaba-nacos-config-client.properties
Group : DEFAULT_GROUP
配置内容 : 
hengboy.name=admin-properties
hengboy.age=11

输出 Nacos Config

一切就绪,我们通过Application方式启动项目,查看控制台打印内容如下所示:

Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-client.properties'}]}
配置信息,名称:admin-properties,年龄:11

自动更新配置

在上面的步骤中我们已经可以从Nacos Config内读取到对应的properties配置文件内容信息。
那我们如果通过Nacos Console进行修改了配置内容后,我们的应用程序是不是可以立马获取到修改后的值呢?

我们带着这个疑问,去Nacos Console找到DATA-ID = alibaba-nacos-config-client.properties的配置信息,修改hengboy.age的值为25,重新发布配置信息后查看我们的应用程序的控制台输出内容如下所示:

Loading nacos data, dataId: 'alibaba-nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='alibaba-nacos-config-client.properties'}]}
Refresh keys changed: [hengboy.age]
配置信息,名称:admin-properties,年龄:25

可以看到输出的内容,我们修改完外部的配置信息后,Nacos Client会自动刷新所修改的配置文件内容,始终让配置内容保持与Nacos Config内配置一致。
我们通过Nacos Console修改的当前DATA-ID下的任何参数都会在控制台Refresh keys changed: [xxx,xxx]打印。

总结

本章简单的讲解了SpringCloud Alibaba的配置中心读取配置信息方式以及自动更新配置信息实现,在开头我们说了Nacos Config所支持的配置文件的格式不仅仅是properties这一种,不过这是默认的一种方式,在下一章我们来讲解下YAML方式的配置信息读取。

源码位置

开源信息

  • MicroJob
    micro-job是一款分布式任务调度执行框架,用于集群环境负载均衡条件下的任务分发以及任务消费

任务消费者节点定义任务 & 任务自动上报
任务调度器自动根据负载均衡策略来选择不同的消费者节点进行任务消费


[点击查看MicroJob官方文档](http://job.yuqiyu.com/#/)
相关文章
|
10月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
914 148
|
7月前
|
负载均衡 Dubbo Java
Spring Cloud Alibaba与Spring Cloud区别和联系?
Spring Cloud Alibaba与Spring Cloud区别和联系?
|
8月前
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
3039 14
|
8月前
|
前端开发 Java Nacos
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
本文介绍了如何使用Spring Cloud Alibaba 2023.0.0.0技术栈构建微服务网关,以应对微服务架构中流量治理与安全管控的复杂性。通过一个包含鉴权服务、文件服务和主服务的项目,详细讲解了网关的整合与功能开发。首先,通过统一路由配置,将所有请求集中到网关进行管理;其次,实现了限流防刷功能,防止恶意刷接口;最后,添加了登录鉴权机制,确保用户身份验证。整个过程结合Nacos注册中心,确保服务注册与配置管理的高效性。通过这些实践,帮助开发者更好地理解和应用微服务网关。
1263 0
🛡️Spring Boot 3 整合 Spring Cloud Gateway 工程实践
|
9月前
|
人工智能 安全 Java
AI 时代:从 Spring Cloud Alibaba 到 Spring AI Alibaba
本次分享由阿里云智能集团云原生微服务技术负责人李艳林主讲,主题为“AI时代:从Spring Cloud Alibaba到Spring AI Alibaba”。内容涵盖应用架构演进、AI agent框架发展趋势及Spring AI Alibaba的重磅发布。分享介绍了AI原生架构与传统架构的融合,强调了API优先、事件驱动和AI运维的重要性。同时,详细解析了Spring AI Alibaba的三层抽象设计,包括模型支持、工作流智能体编排及生产可用性构建能力,确保安全合规、高效部署与可观测性。最后,结合实际案例展示了如何利用私域数据优化AI应用,提升业务价值。
791 4
|
10月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
535 5
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
12月前
|
负载均衡 Java API
【Spring Cloud生态】Spring Cloud Gateway基本配置
【Spring Cloud生态】Spring Cloud Gateway基本配置
850 0
|
消息中间件 监控 搜索推荐
Spring全家桶--SpringCloud(中级)(三)
Spring全家桶--SpringCloud(中级)(三)
211 0
Spring全家桶--SpringCloud(中级)(三)
|
存储 消息中间件 监控
Spring全家桶--SpringCloud(中级)(二)
Spring全家桶--SpringCloud(中级)(二)
184 0
Spring全家桶--SpringCloud(中级)(二)