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/#/)
相关文章
|
28天前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
107 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
16天前
|
消息中间件 自然语言处理 Java
知识科普:Spring Cloud Alibaba基本介绍
知识科普:Spring Cloud Alibaba基本介绍
47 2
|
24天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
24天前
|
负载均衡 算法 Java
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
40岁老架构师尼恩分享了关于SpringCloud核心组件的底层原理,特别是针对蚂蚁集团面试中常见的面试题进行了详细解析。内容涵盖了Nacos注册中心的AP/CP模式、Distro和Raft分布式协议、Sentinel的高可用组件、负载均衡组件的实现原理等。尼恩强调了系统化学习的重要性,推荐了《尼恩Java面试宝典PDF》等资料,帮助读者更好地准备面试,提高技术实力,最终实现“offer自由”。更多技术资料和指导,可关注公众号【技术自由圈】获取。
蚂蚁面试:Nacos、Sentinel了解吗?Springcloud 核心底层原理,你知道多少?
|
4天前
|
负载均衡 应用服务中间件 Nacos
Nacos配置中心
Nacos配置中心
21 1
Nacos配置中心
|
4月前
|
Java Nacos 数据库
使用 nacos 搭建注册中心及配置中心
使用 nacos 搭建注册中心及配置中心
99 5
|
4月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
128 3
|
4天前
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
13 4
|
4天前
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,实际使用中常遇到“客户端不发送心跳检测”的问题。本文深入探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务正常运行。通过检查客户端配置、网络连接、日志、版本兼容性、心跳策略、注册状态、重启应用和环境变量等步骤,系统地排查和解决这一问题。
15 3
|
4天前
|
安全 Nacos 数据库
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改
Nacos是一款流行的微服务注册与配置中心,但直接暴露在公网中可能导致非法访问和数据库篡改。本文详细探讨了这一问题的原因及解决方案,包括限制公网访问、使用HTTPS、强化数据库安全、启用访问控制、监控和审计等步骤,帮助开发者确保服务的安全运行。
13 3
下一篇
无影云桌面