1.Nacos作为配置中心-基础配置
1.1.创建工程 cloudalibaba-config-nacos-client3377
(1)pom.xml
<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>
(2)配置文件 bootstrap.yml
Nacos通springcloud-config一样,在项目初始化时,要保证先从配置中心配置拉取,拉取配置后,才能保证项目的正常启动。
springboot中配置文件的加载是存在优先顺序的,bootstrap优先级高于application
server:
port: 3377
spring:
application:
name: nacos-config-client
profiles:
active: dev
cloud:
nacos:
discovery:
server-addr: 192.168.10.33:8848 #服务注册中心地址
config:
server-addr: 192.168.10.33:8848 #配置中心地址
file-extension: yaml #指定yaml格式的配置
(3)主启动类 NacosConfigClientMain3377.java
package com.xiaoliu;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @Author LL
* @Date 2020-07-07 15:05
*/
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
(4)业务类 ConfigClientController.java
package com.xiaoliu.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;
/**
* @Author LL
* @Date 2020-07-07 15:10
*/
@RestController
@RefreshScope //实现配置自动更新
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
(5)在Nacos中添加配置信息
(1)Nacos中的匹配规则
Nacos中的dataid的组成格式与SpringBoot配置文件中的匹配规则
最后公式:
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
(2)Nacos中的配置
nacos-config-client-dev公式
${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
- prefix默认为spring.application.name的值
- spring.profile.active既为当前环境对应的profile,可以通过配置项spring.profile.active 来配置
- file-exetension为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension配置
小总节说明
(3)测试
- 启动前需要在nacos客户端-配置管理-配置管理栏目下有没有对应的yaml配置文件
- 运行cloud-config-nacos-client3377的主启动类
- 调用接口查看配置信息 http://localhost:3377/config/info
自带动态刷新
修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新
2.Nacos作为配置中心-分类配置
问题:多环境多项目管理
(1)问题1
实际开发中,通常一个系统会准备 dev开发环境、test测试环境、prod生产环境,如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
(2)问题2
一个大型分布式服务系统会有多个微服务子项目,
每个微服务项目又会有相应的开发环境、测试环境、预发布环境、正式环境...... 那怎么对这些微服务配置进行管理呢?
2.1.Nacos的图形化管理界面
2.1.1.配置管理
2.1.2.命名空间
2.2.Namespace+Group+Data ID三者关系?为什么这么设计?
2.3.实例
2.3.1.DataID方案
(1)指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置
(2)默认空间+默认分组+新建dev和test两个DataID
- 新建dev配置DataID
- 新建test配置DataID
(3)通过spring.profile.active属性就能进行多环境下配置文件的读取
(4)测试
http://localhost:3377/config/info
配置是什么就加载什么 test
2.3.2.Group方案
(1)通过Group实现环境区分
(2)在nacos图形界面控制台上面新建配置文件DataID
(3)bootstrap.yml
2.3.3.Namespace方案
(1)新建dev/test的Namespace
(2)回到服务管理-服务列表查看
(3)按照域名配置填写
3.Nacos集群和持久化配置(重要)
- windows环境下集群配置:https://www.jianshu.com/p/a26e0b36ea31
- Linux环境下集群配置:https://www.jianshu.com/p/24328a6ba316
网友评论