基础配置
在nacos上添加配置
- pom
<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-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
- bootstrap.yml
这里的后缀只能写yaml,不能写yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: DEFAULT_GROUP # 分组
# namespace: 命名空间ID
# {spring.application.name}-{spring.profiles.active}.{spring.cloud.nacos.config.file-extension}
# nacos-config-client-dev.yaml
- application.yml
spring:
profiles:
active: test
- main
@EnableDiscoveryClient
@SpringBootApplication
public class AlibabaConfigClientApp3377 {
public static void main(String[] args) {
SpringApplication.run(AlibabaConfigClientApp3377.class,args);
}
}
- controller
@RestController
@RefreshScope
public class ConfigClientController
{
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
Nacos的分类配置
是什么?
- 类似Java里面的package名和类名
- 最外层的namespace是可以用于区分部署环境的,Group和DatalD逻辑上区分两个目标对象。
为什么这么设计?
默认情况:
-
Namespace=public,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
-
Nacos默认的命名空间是public,Namespace主要用来实现隔离。
- 比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
-
Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去,多个Service可以组成Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。
- 比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
-
最后是Instance,就是微服务的实例。
DataID方案
指定spring.profile.active
和配置文件的DatalD来使不同环境下读取不同的配置
如:
-
spring.profile.active
指定为dev,对应读取的配置文件为:{spring.application.name}-dev.{spring.cloud.nacos.config.file-extension} -
spring.profile.active
指定为test,对应读取的配置文件为:{spring.application.name}-test.{spring.cloud.nacos.config.file-extension}
group方案
通过在yml中配置不同group,实现读取对应group的DataID文件。
- 不同group下的DataID可以相同。
如:在新建配置的时候,指定不同的GROUP
在bootstrap.yml
中指定读取不同的分组
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: DEV_GROUP # 分组
结论:指定哪个分组就会读取对应分组DataID
namespace方案
- 不同的namespace是相互隔离的,在不同的namespace下可以建立不同的分组和DataID
在bootstrap.yml
中指定读取不同的namespace和Group
- 注意:在配置文件中指定的namespace是对应的namespaceID,不是名称
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #服务注册中心地址
config:
server-addr: localhost:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
group: DEFAULT_GROUP # 分组
namespace: 命名空间ID