Nacos(四):SpringCloud项目中接入Nacos作为配置中心
前言
通过前两篇文章:
相信大家已经对nacos作为注册中心的基本使用已经有了一定的了解。
然而,nacos远远不止于此,本文我们来看一下nacos作为配置中心
在springcloud中的使用
我的环境
- windows10
- jdk8
- springcloud:finchley.release
- springboot:2.0.4.release
- spring-cloud-alibaba-dependencies:0.2.2.release
- nacos-server:1.0.1
本文的项目demo继续沿用之前文章中的聚合工程nacos
,若小伙伴还没有之前的环境,可至源码地址中下载
启动nacos-server
进入bin文件夹(目录:nacos-server-1.0.1\nacos\bin),直接双击执行startup.cmd文件,这里具体的启动细节就不再说明
新建配置
在nacos-server中新建配置,其中data id它的定义规则是:${prefix}-${spring.profile.active}.${file-extension}
- prefix 默认为
spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。 - spring.profile.active 即为当前环境对应的
profile
,可以通过配置项spring.profile.active
来配置。 - file-exetension 为配置内容的数据格式,可以通过配置项
spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataid 的拼接格式变成 ${prefix}.${file-extension}
这里我创建data id 为nacos-config.yml
的配置文件,其中group为默认的default_group
,配置文件的格式也相应的选择yaml
,其内添加配置nacos.config=hello_nacos
,如图所示
创建应用
1、在聚合工程nacos下新建module,创建一个名为nacos-config的子工程,其pom.xml文件内容如下
<?xml version="1.0" encoding="utf-8"?> <project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <parent> <artifactid>nacos</artifactid> <groupid>com.study.www</groupid> <version>0.0.1-snapshot</version> </parent> <groupid>com.larscheng.www</groupid> <artifactid>nacos-config</artifactid> <version>0.0.1-snapshot</version> <name>nacos-config</name> <description>demo project for spring boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid> </dependency> <dependency> <groupid>org.springframework.cloud</groupid> <artifactid>spring-cloud-starter-alibaba-nacos-config</artifactid> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project>
2、创建配置文件名为bootstrap.yml
,注意是==bootstrap.xxx==,而不是application
或者其他。原因如下
nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application
这里的配置文件类型可以根据个人习惯选择,我这里用的时yml类型,配置内容如下
spring: application: name: nacos-config cloud: nacos: discovery: server-addr: 127.0.0.1:8848 config: server-addr: 127.0.0.1:8848 file-extension: yml
可以看到必须可少的配置项
spring.application.name
spring.cloud.nacos.discovery.server-addr
指定注册中心的地址,如果你不需要注册该服务,也可以去掉该项,并删除discovery依赖spring.cloud.nacos.config.server-addr
指定配置中心的地址file-extension
指定配置中心中配置文件的格式
上面的配置是为了保证服务的正常注册和配置获取,以及配置dataid
的正确性
3、创建对外接口来从nacos中读取配置,nacosconfigapplication.java修改如下
@springbootapplication @enablediscoveryclient @restcontroller @refreshscope public class nacosconfigapplication { public static void main(string[] args) { springapplication.run(nacosconfigapplication.class, args); } @value("${nacos.config}") private string config; @requestmapping("/getvalue") public string getvalue() { return config; } }
其中通过
@value
注解,去读取key为nacosconfig
的配置的值,并通过/getvalue接口返回。
加入@refreshscope
注解,可以使当前类下的配置支持动态更新。
到此代码部分的工作已经完成
启动测试
- 保证nacos-server已经启动
- 检查配置文件是否已经添加
- 启动nacos-config项目
启动成功后在nacos控制台中可以看到我们注册的服务
此时调用接口进行测试 http://127.0.0.1:8080/getvalue ,可以看到返回结果
hello_nacos
此时说明已经成功读取到配置,下面我将nacos-server上的配置修改为hello_lars
,看看能否动态更新
调用接口进行测试 http://127.0.0.1:8080/getvalue ,返回结果如下
hello_lars
可以看到我通过nacos-server的控制台进行配置的修改,客户端服务nacos-config
也相应的进行热更新。
总结
通过上面的测试,可见nacos做配置中心,在springcloud项目中,也可以做到无缝衔接,切换到nacos可以说知识修改配置的问题,成本也很低
项目的其他配置不变,只需要指定配置中心地址,同时将配置文件外部管理。
本文源码:https://github.com/larscheng/larscheng-learning-demo/tree/master/nacos
参考
- 文章作者: larscheng
- 文章链接: 本文首发于个人博客:https://www.larscheng.com/nacos-namespace/
- 发布方式:openwrite 最懂你的科技自媒体管理平台
- 版权声明: 本博客所有文章除特别声明外,均采用 cc by-nc-sa 4.0 许可协议。转载请注明来自 larscheng's blog!