SpringCloud+Nacos实现服务配置中心(Hoxton版本)
共 6233字,需浏览 13分钟
·
2021-04-14 17:19
点击上方蓝色字体,选择“标星公众号”
优质文章,第一时间送达
作者 | 悬铃木pp
来源 | urlify.cn/7BJV3a
关于 Nacos Spring Cloud 的详细文档请参看:Nacos Config和Nacos Discovery。
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 实现服务的注册与发现。
前提条件
首先下载安装一个nacos server,然后启动nacos server。下载和安装流程查看https://www.cnblogs.com/ying-z/p/14630738.html
新建配置
可以通过两种方式新建配置。
方式一:访问Nacos Server页面手动创建。
首先登录Nacos Server,地址一般为http://127.0.0.1:8848/nacos/index.html。
然后进入配置列表,点击新增配置按钮,进入新增配置页面。
注意:
这里我创建Data Id为nacos-config.properties的配置文件,其中Group为默认的DEFAULT_GROUP,配置文件的格式也相应的选择Properties,配置内容中添加配置nacos.config=hello_nacos,如图所示。
方式二:通过调用Nacos Open API向Nacos Server发布配置:dataId为nacos-config.properties,内容为nacos.config=hello_nacos
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos-config.properties&group=DEFAULT_GROUP&content=nacos.config=hello_nacos"
创建服务应用
(1)使用SpringBoot,创建一个名为nacos-config的子工程。
(2)pom.xml文件添加如下依赖。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
<dependencies>
<!-- 声明Spring cloud的版本为Hoxton.SR3-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 声明Spring cloud alibaba版本为2.1.0.RELEASE -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- 声明nacos-discovery依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 声明nacos-config依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
备注:如果不需要注册该服务,也可以去掉nacos-discovery依赖。
注意:版本2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
更多版本对应关系参考:版本说明 Wiki
(3)修改application.properties添加相关配置
server.port=9002
spring.application.name=nacos-config
spring.application.cloud.nacos.discovery.server-addr=127.0.0.1:8848
(4)创建配置文件,文件名为bootstrap.properties。并在bootstrap.properties中配置Nacos server的地址和应用名。
注意:文件名是bootstrap.xxx,而不是application或者其他。因为Nacos同Spring Cloud Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常启动。SpringBoot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。
这里的配置文件类型可以根据个人习惯选择,我这里用的时properties类型,配置内容如下:
#服务名称
spring.application.name=nacos-config
#指定注册中心的地址。如果你不需要注册该服务,也可以去掉该项,并删除discovery依赖。
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
#指定配置中心的地址。
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#指定配置中心中配置文件的格式。
#spring.cloud.nacos.config.file-extension=properties
之所以需要配置spring.application.name,是因为它是构成Nacos配置管理dataId字段的一部分。
在Nacos-Server配置管理,其中Data ID它的定义规则是:
${prefix}-${spring.profile.active}.${file-extension}
prefix:默认为spring.application.name的值,也可以通过配置项spring.cloud.nacos.config.prefix来配置。
spring.profile.active:即为当前环境对应的profile,详情可以参考 Spring Boot文档。可以通过配置项spring.profile.active来配置。当spring.profile.active为空时,对应的连接符 - 也将不存在,dataId的拼接格式变成 ${prefix}.${file-extension}。
file-exetension:为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension来配置。目前只支持properties和yaml类型。
(5)创建对外接口ConfigController,从nacos中读取配置。
@RefreshScope
@RestController
public class ConfigController {
@Value("${nacos.config}")
private String configValue;
@RequestMapping("/config/get")
public String get() {
return configValue;
}
}
@RefreshScope:Spring Cloud的原生注解,可以使当前类下的配置支持动态更新。
@Value:通过@Value注解,去读取key为nacos.config的配置的值,并通过/config/get接口返回。
到此代码部分的工作已经完成。
启动服务进行测试
(1)保证Nacos-Server已经启动。
(2)检查Nacos-Server中配置列表中是否已经添加相应的配置文件。
(3)启动nacos-config项目。
(4)启动成功后在Nacos控制台中可以看到我们注册的服务。
(5)此时调用接口进行测试http://127.0.0.1:9002/config/get,可以看到返回结果。
此时说明已经成功读取到配置。
(6)下面我将Nacos-Server上的配置修改为hello_lars,看看能否动态更新。修改Nacos-Server上的配置后,刷新http://127.0.0.1:9002/config/get页面,结果更新为新的配置了。
可以看到我通过Nacos-server的控制台进行配置的修改,客户端服务nacos-config也相应的进行热更新。
粉丝福利:Java从入门到入土学习路线图
👇👇👇
👆长按上方微信二维码 2 秒
感谢点赞支持下哈