前言
Spring Cloud Alibaba的目标是为微服务开发提供一站式解决方案。该项目包含开发分布式应用程序和服务所需的组件,因此开发人员可以使用Spring Cloud编程模型轻松地开发分布式应用程序。
其中的Nacos提供了非常优秀的配置中心和服务注册中心服务,并且提供了可视化的Web控制台和丰富的API接口。
本文记录了使用Nacos作为配置中心的配置过程。
1、 Nacos是什么?能干什么?
Nacos: Dynamic Naming and Configuration Service
引用Nacos的官方介绍:
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
2、使用步骤
2.1、引入库
引入maven依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${nacos-version}</version>
</dependency>
注意:版本 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 版本。
2.2、做一些配置
在项目resources中新建boostrap.yml或者bootstrap.properties文件(注意不是application.yml):
spring:
application:
name: user-service #服务名称,它是构成 Nacos 配置管理 dataId字段的一部分,必须
cloud:
nacos:
config:
server-addr: 192.168.0.105:8848 #nacos的地址
file-extension: properties #配置类型,必须nacos中配置的类型对应
说明:之所以需要配置 spring.application.name
,是因为它是构成 Nacos 配置管理 dataId
字段的一部分。
在 Nacos Spring Cloud 中,dataId
的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
-
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。 -
spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
-
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型。
2.3、 写一个测试
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author cloudgyb
* 2021/2/21 17:20
*/
@RestController
@RefreshScope
public class AdminController {
@Value("${admin.name:未知}")
private String adminName;
@Value("${admin.password:未知}")
private String password;
@GetMapping("/admin/info")
public String getAdminInfo(){
return adminName+":"+password;
}
}
@RefreshScope
作用是当配置中心的配置改变时,自动刷新该类的属性值。@Value
时Spring 提供的原生注解,用于注入属性值,属性的key对应Nacos配置中心的key,下面会在Nacos中配置,往下看。
2.4、 启动Nacos Server
cd nacos
./bin/startup.sh -m standalone
2.5、 发布配置到Nacos
1、 可以使用Nacos提供的API
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=user-service.properties&group=DEFAULT_GROUP&content=admin.name=cloudgyb%0Aadmin.password=123"
返回true则发布成功。content参数指定配置内容,注意:多个配置项需要用‘\n’换行符隔开,在url中转码就是%0A。
2、使用Nacos的Web控制台
这里的配置格式选择Properties,因为项目的boostrap.yml文件中指定了file-extension为properties,必须对应起来,否则会读取不到配置。
点击发布就行了。
2.6、 启动项目测试
访问接口:
在Nacos中更改配置
再次访问接口:
无需重启项目,属性已经动态更改。
3、总结
总的来说,使用Nacos配置中心还是比较容易上手的,注意配置的时候细心,不要配置错。
Nacos官方文档:什么是 Nacos