1.概述
在《SpringCloud极简入门》中我们通过Spring Cloud Config作为统一配置文件管理中心,其实我们总结一下发现Spring Cloud Config使用起来总归比较麻烦。Nacos作为Spring Cloud Alibaba的一个重要组件,它不仅可以用作服务注册与发现,也可以用来替代Spring Cloud Config作为统一配置文件管理,而且他的使用更为简单和人性化。
2.Nacos添加配置
打开Nacos监控面板 - 进入配置列表 -点击 “+” 图标添加配置 如下:
填写Data ID,选择YAML,编辑配置文件内容:
这里定义了一个名字为application-user-dev.yaml的配置,使用的是YAML格式。
Data ID
: 非常重要,可以看做是配置的文件的名字,在程序中拉取配置文件的时候需要指定Data ID。Group
: 分组,默认是 DEFAULT_GROUP , 可以针对不同的项目指定不同的配置组。
3.客户端接入配置中心
3.1.导入依赖
修改工程 springcloudalibaba-user-server-1010 ,添加配置中心依赖nacos-config,完整pom.xml如下。
<dependencies>
<!-- 配置中心客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- 服务注册与发现-->
<dependency>
<groupId>com.alibaba.cloud </groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloudalibaba-user-common</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
3.2.编写Controller
下面的Controller用来做配置刷新测试,temp.notify
对应了配置文件中的配置项目。@RefreshScope
注解是用来做配置自动刷新。那么当我们修改了Nacos中的配置文件,Controller中读取到的配置temp.notify
将会自动变化。
@RefreshScope //刷新配置
@RestController
public class UserController {
@Value("${temp.notify}")
private String notify;
@GetMapping("/user/{id}")
public User getById(@PathVariable Long id){
System.out.println("测试配置notify="notify);
return new User(id,"zs:"+id, "我是zs");
}
}
3.3.修改yml配置
注意,将原来的配置文件修改成bootstrap.yml,然后增加如下内容:
server:
port: 1010
spring:
profiles:
active: dev
application:
name: user-server
cloud:
nacos:
discovery:
server-addr: localhost:8848 #注册中心
config:
server-addr: localhost:8848 #配置中心
file-extension: yaml #配置文件格式
prefix: application-user #配置前缀 ,默认使用sring.application.name
group: DEFAULT_GROUP #默认分组
#如何查找配置文件:application-user + dev + yaml=application-user-dev.yaml 正好和Nacos配置的DataId一致
提示:客户端是如何从Nacos中找到配置文件的呢?
spring.cloud.nacos.config.server-addr
:配置了Nacos的地址spring.cloud.nacos.config.file-extension
:指定了配置文件的格式为YAML,默认是properties,spring.cloud.nacos.config.prefix
:配置前缀,如果不配置前缀默认会把 服务名即spring.application.name
的值作为前缀spring.cloud.nacos.config.group
:分组名,默认是DEFAULT_GROUP对应了Nacos配置中的Groupspring.profiles.active
:配置了环境为dev .该配置可以实现多配置多环境管理
根据如上配置,那么config客户端会将:前缀+环境+后缀 拼接成的文件名“application-user-dev.yaml
” 去Nacos上查找是否有对应Data ID的配置文件。
3.4.测试
启动Nacos,启动 springcloudalibaba-user-server-1010 工程 , 修改Nacos中的配置文件内容,然后访问 http://localhost:1010/user/11
,观察控制台打印的 “notify”的值会发生变化。
3.5.注意细节
- 云端配置文件的后缀应该是 yaml而不是yml
- 客户端配置需要指定:spring.profiles.active=dev 环境名
- 客户端配置 :前缀 + 环境名 + 后缀应该和云端配置文件的DataId一致
4.命名空间
命名空间可以用来隔离不同项目的配置文件,在Nacos中配置了命名空间后,那么Java客户端需要指定命名空间后才能拉取到该命名空间下的配置文件。
4.1.创建命名空间
修改Nacos,添加命名空间如下:
这里建立了一个名字为“test”的命名空间,点击确定,然后你需要关注一下命名空间的ID,这个是需要在Java客户端进行配置的。如下:
4.2.在命名空间创建配置
进入配置列表 ,切换到新建立的命名空间“test”,然后创建配置,如下:
需要注意后缀是yaml
需要注意:这里的配置文件名也叫 application-user-dev.yaml,但是他是属于 “test”这个命名空间的 , 我们之前在 默认的“public”命名空间中也有一个同名的配置。
4.3.客户端配置
这里需要指定一下从哪个命名空间拉取配置:
server:
port: 1010
spring:
profiles:
active: dev
application:
name: user-server
cloud:
nacos:
discovery:
server-addr: localhost:8848 #注册中心
config:
server-addr: localhost:8848 #配置中心
file-extension: yaml #配置文件格式
prefix: application-user #配置前缀 ,默认使用sring.application.name
group: DEFAULT_GROUP #默认分组
namespace: 8ef8c1e5-6d20-4efc-80c8-2b2c05541fa3 #命名空间的ID
注意:这里的namespace对应了 Nacos中“test”这个命名空间的ID,意思是从“test”这个命名空间去找 application-user-dev.yaml的配置文件。
4.4.启动测试
启动Nacos,启动 springcloudalibaba-user-server-1010 工程 , 修改Nacos中的配置文件内容,然后访问 http://localhost:1010/user/11
,观察控制台打印的 “notify”的值为
测试一下命名空间
5.小结
这里根据几个简单的步骤就实现了配置文件的管理,相比Spring Cloud Config而言简单太多了。