视频链接:2020最新版SpringCloud框架开发教程-周阳
文章源码:https://github.com/geyiwei-suzhou/cloud2020/
在 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 类型。
通过Spring Cloud原生注解@RefreshScope
实现配置自动更新
cloudalibaba-config-nacos-client3377模块
1. 建module
New --> Module --> Maven[Module SDK:1.8.0_191] --> name[cloudalibaba-config-nacos-client3377] --> Finish
2. 改pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.antherd.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloudalibaba-config-nacos-client3377</artifactId>
<dependencies>
<!-- nacos-config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud alibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--引入公共api包-->
<dependency>
<groupId>com.antherd.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3. 写yml
application.yml:
spring:
profiles:
active: dev # 表示开发环境
bootstrap.yml
# nacos配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # Nacos服务注册中心地址
config:
server-addr: localhost:8848 # Nacos作为配置中西地址
file-extension: yaml # 指定yaml格式的配置
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.config.file-extension}
# nacos-config-client-dev.yaml
4. 主启动
新建类:com.antherd.springcloud.NacosConfigClientMain3377
package com.antherd.springcloud.alibaba;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
5 写业务
新建类:com.antherd.springcloud.alibaba.controller.ConfigClientController
package com.antherd.springcloud.alibaba.controller;
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;
@RestController
@RefreshScope
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
6. 启动测试
访问:http://localhost:8848/nacos/ 点击配置列表,添加配置
新建nacos-config-client-dev.yaml配置
启动:cloudalibaba-config-nacos-client3377 模块
访问:http://localhost:3377/config/info,查看返回结果。然后修改nacos配置中version值,再刷新一下看看效果
Nacos命名空间、分组和DataId三者关系
Namespace + Group + Data ID
问题:
- 如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
- 怎么对微服务配置进行管理
默认情况:Namespace=public,Group=DEFAULT_GROUP,Cluster=DEFAULT Namespace
: 比如现在有三个环境:开发、测试、生产环境,我们可以创建三个Namespace,不同Namespace之间是隔离的Group
:Group可以把不同的微服务划分到同一个分组里面去Service
:一个Service可以包含多个Cluster(集群),Cluster是对指定微服务的一个虚拟划分,比如为了容灾,将Service微服务分别部署在了杭州机房和广州机房。这是就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。Instance
:微服务实例
Nacos命名空间、分组和DataId配置
-
Data Id
新建nacos-config-client-test.yaml配置
修改application.ymlactive: test # 表示测试环境
重新启动:cloudalibaba-config-nacos-client3377 模块
访问:http://localhost:3377/config/info,查看返回结果,发现返回了test配置信息
-
Group
新建nacos-config-client-info.yaml,DEV_GROUP配置
新建nacos-config-client-info.yaml,TEST_GROUP配置
修改application.ymlactive: info
修改bootstrap.yml,在spring.cloud.nacos.config节点下添加group子节点:
group: DEV_GROUP
重新启动:cloudalibaba-config-nacos-client3377 模块
访问:http://localhost:3377/config/info,查看返回结果,发现返回了DEV_GROUP配置信息。再把group修改为:TEST_GROUP试一下
-
Namespace
命名空间 --> 新建命名空间dev、test
在nacos配置界面点击dev
namespace
在dev namespace下新建配置:nacos-config-client-dev.yaml DEFAULT_GROUP、nacos-config-client-dev.yaml DEV_GROUP、config-client-dev.yaml TEST_GROUP
修改application.yml
active: dev # 表示开发环境
复制namespace id:f0004c9f-3217-4a88-b87b-fc4d5ca0b2c6,修改bootstrap.yml,在spring.cloud.nacos.config节点下添加namespace子节点:
group: DEV_GROUP namespace: f0004c9f-3217-4a88-b87b-fc4d5ca0b2c6
重新启动:cloudalibaba-config-nacos-client3377 模块
访问:http://localhost:3377/config/info,查看返回结果。修改namespace或group再看一下效果。