一、基础配置
参考文档 Spring Cloud Alibaba Reference Documentation
1、新建模块
新建普通maven模块 cloudalibaba-config-nacos-client3377
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>cloud</artifactId> <groupId>com.shang.cloud</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> <!--nacos-discovery--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!--web + actuator--> <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> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> </project>
3、编写yml文件
(1)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.nacos.config.file-extension} # 应该是 nacos-config-client-dev.yaml
(2)application.yml
1. spring: 2. profiles: 3. active: dev # 表示开发环境
(3)为什么要配置两个yml
Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,
拉取配置之后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application。
其实学了config之后,这样的做法很容易理解。
4、编写主启动类
@EnableDiscoveryClient @SpringBootApplication public class NacosConfigClientMain3377 { public static void main(String[] args) { SpringApplication.run(NacosConfigClientMain3377.class, args); } }
5、编写业务逻辑代码
通过springcloud的原生注解 @RefreshScope 来实现配置的自动刷新。
@RestController @RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。 public class ConfigClientController { @Value("${config.Info}") private String configInfo; @GetMapping("/config/info") public String getConfigInfo(){ return configInfo; } }
6、在Nacos中添加配置信息
(1)Nacos中的配置规则
所以我们的DataId应为 nacos-config-client-dev.yaml
(2)配置新增
然后点击发布。
7、启动测试
启动3377
访问 http://localhost:3377/config/info
读取到了我们之前写在Nacos里的配置
8、Nacos自带动态刷新
修改配置文件
修改好后只需刷新页面即可获取新的配置文件
简直比config方便太多!!!
二、分类配置
现在有两个问题:
问题1:
实际开发中,通常一个系统会准备:
dev开发环境
test测试环境
prod生产环境。
如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
问题2:
一个大型分布式微服务系统会有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境......。那怎么对这些微服务配置进行管理呢?
1、Nacos中的配置管理
Namespace+Group+Data ID
类似Java里面的package名和类名
最外层的namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
默认情况:
Namespace=public,Group=DEFAULT_GROUP, 默认Cluster是DEFAULT
Nacos默认的命名空间是public,Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去
Service就是微服务;一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
2、DataID方案加载配置
指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置。
1)新建配置
我们新建一个nacos-config-client-test.yaml
(2)修改application.yml
然后在idea的3377模块中把active改为test
(3)测试
访问 http://localhost:3377/config/info
发现读取到的是test的配置文件。
这就说明我们可以通过更改active的值指定读取的配置文件。
3、Group方案加载配置
(1)新建配置
新建一个Group为DEV_GROUP的配置
再新建一个Group为TEST_GROUP的配置
然后就可以在配置列表里看到两个Data Id相同,Group不同的配置
(2)修改bootstrap.yml和application.yml
appcation.yml:
bootstrap.yml:
(3)运行测试
4、命名空间方案加载配置
(1)新建命名空间
新建dev命名空间
再用同样方法新建test命名空间
建好了之后,点击配置列表,上方会出现新建的命名空间
(2)bootstrap.yml
namespace后的id为:
(3)在新建的namespace下新建配置
后面的操作即和前面一样。