SpringCloud大盘餐之Nacos配置中心
一、Nacos配置中心介绍
在系统开发过程中,开发者通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。目的是让静态的系统工件或者交付物(如 WAR,JAR 包等)更好地和实际的物理运行环境进行适配。配置管理一般包含在系统部署的过程中,由系统管理员或者运维人员完成。系统配置的集中管理(编辑、存储、分发)、动态更新不重启、回滚配置(变更管理、历史版本管理、变更审计)等所有与配置相关的活动。
二、Nacos配置中心搭建
一、集成maven依赖
父级Pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.cloud</groupId>
<artifactId>cloud-demo</artifactId>
<version>1.0</version>
<name>cloud-demo</name>
<packaging>pom</packaging>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring.cloud-version>Hoxton.SR5</spring.cloud-version>
</properties>
<modules>
<module>producer</module>
<module>consumer</module>
<module>configure</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- springCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springcloud alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.0.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- springBoot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
<!-- json -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
</dependencies>
子模块pom.xml
<parent>
<groupId>com.cloud</groupId>
<artifactId>cloud-demo</artifactId>
<version>1.0</version>
</parent>
<groupId>com.cloud</groupId>
<artifactId>configure</artifactId>
<version>1.0</version>
<name>configure</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- Nacos配置中心 -->
<dependency>
<groupId>com.alibaba.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>
二、Nacos创建配置文件
首先 配置管理–配置列表,点击右侧 + 新增配置。
编辑内容后点击发布:
三、配置bootstrap.yml配置文件
下面来看一下bootstrap.yml配置
注意:配置中心一定要用bootstrap.yml,使用application.yml则不生效
server:
port: 8003
spring:
application:
name: configure
cloud:
nacos:
config: #创建nacos配置中心必须用bootstrap.yml或bootstrap.properties配置
server-addr: x.x.x.x:8848 #服务配置中心地址
prefix: ${spring.application.name} #配置中心对应配置文件前缀
file-extension: yml #指定配置中心中对应的配置文件的格式
然后看代码:
/**
* @Author wangy
* @create 2021/6/15 9:56
* @Description Nacos配置中心
*/
@RestController
@RequestMapping("/configure")
public class ConfigureController {
@Value("${config.name}")
private String configName;
@Value("${config.age}")
private String configAge;
/**
* 通过配置中心获取配置
* @return
*/
@GetMapping("/getConfig")
public String getConfig(){
return "通过配置中心获取到{name:"+configName+",age:"+configAge+"}";
}
}
应用启动后调用接口,发现成功读取配置:
http://127.0.0.1:8003/configure/getConfig
四、动态获取配置
第二节上面编辑Nacos配置后,调用接口配置未改变,现在需要用到@RefreshScope注解
看代码:
@RestController
@RequestMapping("/configure")
@RefreshScope //加上此注解后,修改Nacos配置后,则会自动刷新配置内容
public class ConfigureController {
@Value("${config.name}")
private String configName;
@Value("${config.age}")
private String configAge;
/**
* 通过配置中心获取配置
* @return
*/
@GetMapping("/getConfig")
public String getConfig(){
return "通过配置中心获取到{name:"+configName+",age:"+configAge+"}";
}
}
后面再修改Nacos配置,重新调用接口会返回最新的配置了。
五、group和namespace配置
配置中心有namespace命名空间和group组的概念,看配置
server:
port: 8003
spring:
application:
name: configure
cloud:
nacos:
config: #创建nacos配置中心必须用bootstrap.yml或bootstrap.properties配置
server-addr: x.x.x.x:8848 #服务配置中心地址
prefix: ${spring.application.name} #配置中心对应配置文件前缀
file-extension: yml #指定配置中心中对应的配置文件的格式
group: CLOUD_GROUP #命名空间下的,默认DEFAULT_GROUP
namespace: cloud #命名空间ID
则需要在Nacos平台创建名称为“cloud”的命名空间。
创建完后,回到配置列表,点击cloud,重新创建配置
重新创建的配置group输入:CLOUD_GROUP
然后重新启动项目,调用接口获取配置查看效果已得到配置。
六、spring.profiles.active配置文件
看配置:
server:
port: 8003
spring:
application:
name: configure
profiles:
active: dev #自定义环境配置
cloud:
nacos:
config: #创建nacos配置中心必须用bootstrap.yml或bootstrap.properties配置
server-addr: x.x.x.x:8848 #服务配置中心地址
prefix: ${spring.application.name} #配置中心对应配置文件前缀
file-extension: yml #指定配置中心中对应的配置文件的格式
group: CLOUD_GROUP #DEV命名空间下的DEFAULT_GROUP
namespace: cloud #命名空间ID
配置中加入了:spring.profiles.active=dev
则需要在当前 命名空间、group、下创建配置为:configure-dev.yml的配置。
重新调用接口则获取到configure-dev.yml的配置。
三、参考项目源码
当前项目源码地址:
https://gitee.com/wangyue123com_admin/cloud-demo.git
分支为:Nacos-Configuration