SpringCloud Alibaba是阿里巴巴致力于对微服务的管理、配置、注册等一整套的解决方案,内部主要是Nacos相关的依赖进行实现,本系列文章主要来讲解下Nacos Config在SpringCloud环境下的运用。
简介
Nacos 提供用于存储配置和其他元数据的 K-V 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Nacos Config支持多种方式的配置格式,比如:TEXT、JSON、XML、YAML、HTML、PROPERTIES等。
我们本章先来看下是怎么读取外部Properties类型的配置。
前提
本地需要安装Nacos Server,具体安装步骤访问Nacos官网文档,Nacos Server 安装
创建项目
使用idea工具创建一个SpringCloud项目。
添加依赖
添加依赖在pom.xml配置文件如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| //... <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> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> </dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <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文件内添加。
配置内容如下所示:
1 2 3 4 5 6 7 8 9
| spring: application: name: alibaba-nacos-config-client 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秒后再次读取配置内容,编码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
@SpringBootApplication public class SpringCloudAlibabaNacosConfigPropertiesApplication {
static Logger logger = LoggerFactory.getLogger(SpringCloudAlibabaNacosConfigPropertiesApplication.class);
public static void main(String[] args) throws Exception { ConfigurableApplicationContext applicationContext = SpringApplication.run(SpringCloudAlibabaNacosConfigPropertiesApplication.class, args); while (true) { 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的值。
添加的配置信息如下所示:
1 2 3 4 5
| DATA ID : alibaba-nacos-config-client.properties Group : DEFAULT_GROUP 配置内容 : hengboy.name=admin-properties hengboy.age=11
|
输出 Nacos Config
一切就绪,我们通过Application方式启动项目,查看控制台打印内容如下所示:
1 2 3
| 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,重新发布配置信息后查看我们的应用程序的控制台输出内容如下所示:
1 2 3 4
| 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方式的配置信息读取。