为什么要有分布式配置中心
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。
Nacos Config
Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。
Spring Cloud Alibaba Nacos Config 是 Spring Cloud Config Server 和 Client 的替代方案,客户端和服务器上的概念与 Spring Environment 和 PropertySource 有着一致的抽象,在特殊的 bootstrap 阶段,配置被加载到 Spring 环境中。当应用程序通过部署管道从开发到测试再到生产时,您可以管理这些环境之间的配置,并确保应用程序具有迁移时需要运行的所有内容。
在nacos服务端创建配置文件
使用客户端动态接收数据
1.创建nacos-config 项目
引入依赖
<dependencies>
<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>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-config</artifactId>
</dependency>
</dependencies>
2.创建配置文件 bootstrap.properties
springcloud读取配置文件的顺序
bootstrap.properties
-> bootstrap.yml
-> application.properties
-> application.yml
#应用springboot 启动前 先去读取bootstrap.properties ,然后去配置中心拉取对应的配置文件
# 应用名 模块名 注意应用名 不可以使用_ springcloud_alibaba_provider
spring.application.name=springcloud-alibaba-nacos-provider
#配置nacos 服务地址
spring.cloud.nacos.server-addr=localhost:8848
server.port=8086
#暴露所有应用断点,便于监控
management.endpoints.web.exposure.include=*
student.name=xiaoming
3.创建启动类
@EnableDiscoveryClient
@SpringBootApplication
public class DemosApplication {
public static void main(String[] args) {
SpringApplication.run(DemosApplication.class,args);
}
}
4.创建controller
@RestController
public class StudentController {
@Value("${student.name}")
private String name;
@Autowired
private ConfigurableEnvironmentConfiguration configuration;
@RequestMapping("student")
public String getStudent(){
return "配置文件---studentName:"+name +"---与配置中心保持一致的数据:"
+configuration.getString("student.name");
}
}
5. 测试 通过浏览器访问
6. 修改
springcloud-alibaba-nacos-provider
的配置文件
7. 再次去访问
可以得到通过value注解只能获取一次的数据,通过
ConfigurableEnvironmentConfiguration类可以实时获得数据
可以在配置文件加入
spring.cloud.nacos.config.refresh.enabled=false
禁止自动刷新
8. Nacos Config 多环境的配置
bootstrap.properties appliction.properties 默认配置都是任何时候都生效
我们还可以配置 自定义环境,便于开发 ,但是前提必须是先要激活
bootstrap-dev.properties
bootstrap-test.properties
多环境激活方式两种
第一种方式在 bootstrap.properties 配置
# 激活dev 环境 让bootstrap-dev.properties 生效
spring.profiles.active=dev
第二种:
1.创建
bootstrap.properties
#应用springboot 启动时 先去读取bootstrap.properties ,然后去
# 应用名 模块名 注意应用名 不可以使用_ springcloud_alibaba_provider
spring.application.name=springcloud-alibaba-nacos-provider
spring.cloud.nacos.config.file-extension=properties
#配置nacos 服务地址
spring.cloud.nacos.server-addr=localhost:8848
server.port=8086
#暴露所有应用断点,便于监控
management.endpoints.web.exposure.include=*
student.name=xiaoming
#激活dev 开发环境
spring.profiles.active=dev
bootstrap-dev.properties
#应用springboot 启动前 先去读取bootstrap.properties ,然后去配置中心拉取对应的配置文件
student.name=xoaming-dev
可以看到获取到的值都为配置中心的
修改参数为xiaoliu-dev
可以看到结果如下,后面的改变前面的不变