一、快速入门
1、创建工程nacos-client7777
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>springcloud_alibaba</artifactId>
<groupId>com.liming</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nacos-client7777</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringCloud Alibaba nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
</project>
application.yml
spring:
profiles:
active: dev #表示开发环境
bootstrap.yml
server:
port: 7777
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服务注册中心地址
config:
server-addr: localhost:8848 # nacos作为配置中心地址
file-extension: yaml # 指定yaml格式的配置
group: BJ_GROUP
namespace: e1bd77d5-f676-4e41-9007-a1a188f74cbf
#${prefix}-${spring.profiles.active}.${file-extension}
#${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
主启动类@EnableDiscoveryClient
package com.liming.nacos;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @author 黎明
* @date 2023/5/14 13:09
* @version 1.0
*/
@SpringBootApplication
@EnableDiscoveryClient
public class NacosClient7777App {
public static void main(String[] args) {
SpringApplication.run(NacosClient7777App.class,args);
}
}
controller
package com.liming.nacos.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.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 黎明
* @date 2023/5/14 13:10
* @version 1.0
*/
@RestController
@RequestMapping("/config")
@RefreshScope // 开启刷新功能
public class ConfigClientController {
@Value("${name}")
String name;
@GetMapping("/name")
public String name(){
return name;
}
}
在Nacos中添加配置信息
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
测试:http://localhost:7777/config/name
注意:因为添加了@RefreshScope注解,所以我们更改配置信息内容,会动态刷新
二、分类配置
- 问题1:实际开发中,通常一个系统会准备dev/test/prod环境。如何保证环境启动时服务能正确读取nacos上相应环境的配置文件?
答案:
namespace区分
- 问题2:一个大型分布式微服务系统有很多微服务子项目,每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境。那怎么对微服务配置进行管理呢?
答案:
用group把不同的微服务划分到同一个分组里面去
dgn方案:
1、DataId方案(就是nacos文件名)
指定
spring.profile.active
和配置文件的DataID
来使不同环境下读取不同的配置
配置空间+配置分组+新建dev和test两个dataid:就是创建后不同的两个文件名nacos-config-client-dev.yaml
、nacos-config-client-test.yaml
通过IDEA里的spring.profile.active属性就能进行多环境下配置文件的读取。
2、Group方案(默认DEFAULT_GROUP)
在nacos创建配置文件时,给文件指定分组。 在IDEA中该group内容实现的功能:当修改开发环境时,只会从同一group中进行切换。
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos服务注册中心地址
config:
server-addr: localhost:8848 #Nacos作为配置中心地址
file-extension: yaml #指定yaml格式的配置
group: BJ_GROUP
3、namespace方案(默认public)
这个是不允许删除的,可以创建一个新的命名空间,会自动给创建的命名空间一个流水号。 在nacos新建命名空间,自动出现e1bd77d5-f676-4e41-9007-a1a188f74cbf
在IDEA的yml中指定命名空间namespace: e1bd77d5-f676-4e41-9007-a1a188f74cbf
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服务注册中心地址
config:
server-addr: localhost:8848 # nacos作为配置中心地址
file-extension: yaml # 指定yaml格式的配置
group: BJ_GROUP
namespace: e1bd77d5-f676-4e41-9007-a1a188f74cbf
最后,dataid、group、namespace 三者关系如下:(不同的dataid,是相互独立的,不同的group是相互隔离的,不同的namespace也是相互独立的)