1、前言
在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。配置变更是调整系统运行时的行为的有效手段。
如果微服务架构中没有使用统一配置中心时,所存在的问题:
配置文件分散在各个项目里,不方便维护
配置内容安全与权限
更新配置后,项目需要重启
nacos配置中心:系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。
本文章以前面讲的内容为基础。
微服务的搭建
https://blog.csdn.net/supersolon/article/details/117709129?spm=1001.2014.3001.5501
nacos的安装
https://blog.csdn.net/supersolon/article/details/117521085?spm=1001.2014.3001.5501
nacos实现注册中心
https://blog.csdn.net/supersolon/article/details/117824599?spm=1001.2014.3001.5501
今天继续讲SpringCloud整合Nacos实现配置中心
2、Nacos配置中心服务
通过 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
还是以iot-usercenter服务为例进行讲解(iot-common步骤一样,不再赘述)。
2.1Nacos新建配置
点击Nacos-【配置管理】-【配置列表】-【+】按钮,弹出新建配置页面。
在页面中添加user信息,设置user的name、age信息。
Data ID:一般为服务名
Group:默认为DEFALT_GROUP
配置模式:YAML
配置内容:
name: wangshanshan-usercenter
age: 11
2.2配置pom.xml文件
2.2.1父工程pom文件
引入spring-cloud-alibaba的依赖
<!-- 声明依赖 springCloudAlibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
2.2.2子工程pom文件
iot-usercenter模块的pom.xml文件中,添加nacos配置中心依赖
代码如下:
<!-- nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
添加完依赖后,点击右上角的Load Maven Changers按钮,使新引入的依赖生效。
2.3配置application.yml文件
application.yml文件,添加nacos配置服务信息以及user信息。
代码如下:
server:
port: 9091
spring:
application:
name: iot-usercenter
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml # 必须修改成yaml
group: DEFAULT_GROUP # 缺省即可
prefix: ${spring.application.name} # 缺省即可
user:
name: lisi-application
age: 19
说明:之所以需要配置 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.4Controller类添加@RefreshScope注解
添加 @RefreshScope 注解实现配置的动态刷新
代码如下:
package com.iot.usercenter.controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/user")
@RefreshScope
public class UserController {
// private String name = "lisi";
// private String age = "19";
//引入@RefreshScope注解,值从配置文件获取
@Value("${user.name}")
private String name;
@Value("${user.age}")
private String age;
//登录
@RequestMapping("/login")
public String login(){
String msg =" I am " + name + " , I am " + age + " years old!";
System.out.println(msg);
return msg;
}
}
2.5重启并访问服务
2.5.1重启
2.5.2访问
访问服务,获取到nacos配置里的user信息,跟nacos配置的信息一致。
6.6更新配置查看效果
更新配置
刷新查看信息,信息根据配置进行更新。
3、Nacos多个服务共用一个配置
比如有一个产品环境,多个服务共用一套信息的情况下,可以创建一个iot-product的配置。
配置文件中nacos.config.prefix统一配置为iot-product。
3.1添加公共配置
3.2修改bootstrap.yml配置文件
bootstrap.yml配置文件内容如下:
server:
port: 9091
spring:
application:
name: iot-usercenter
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yaml # 必须修改成yaml
group: DEFAULT_GROUP # 缺省即可
prefix: iot-product # 缺省即可
user:
name: lisi-bootstrap
age: 19