分布式应用配置管理
分布式应用配置管理
发布配置
启动nacos,在dev下发布配置
service1
namespace: 2d108db1-4b7b-4175-8012-be00d735ea8a # 开发环境
Data ID: service1.yaml
Group : test_group
配置格式: YAML
配置内容:
common: name: service1 config
service2
namespace: 2d108db1-4b7b-4175-8012-be00d735ea8a # 开发环境
Data ID: service2.yaml
Group : test_group
配置格式: YAML
配置内容:
common: name: service2 config
构建项目获取配置
不同项目,可以获取nacos上不同的配置文件
创建一个springboot父工程nacos-config,添加依赖
nacos-config版本 2.1.x.RELEASE 对应的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 对应的是 Spring Boot 2.0.x 版本,版本 1.5.x.RELEASE 对应的是 Spring Boot 1.5.x 版本。
<!--父工程打包方式-->
<packaging>pom</packaging>
<!--子项目要在module里-->
<modules>
<module>service1</module>
<module>service2</module>
</modules>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
子springboot项目service1
1.pom.xml
<!--父项目为nacos-config-->
<parent>
<artifactId>nacos-config</artifactId>
<groupId>com.example</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
2.配置文件:bootstrap.yml
配置文件的优先级:
bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml
application 作用域在于 当前应用有效
bootstrap 系统级别的配置有效(一般采用远程配置的时候才会用到)
server:
port: 56010
spring:
application:
name: service1
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: 2d108db1-4b7b-4175-8012-be00d735ea8a # 不指定,就是public下的
file-extension: yaml
group: test_group
# 配置动态刷新,默认就是true
refresh-enabled: true
3.接口获取配置
@RefreshScope不能配置在启动类上,无效果。
@RestController
@RefreshScope
public class TestController {
//动态刷新方式1
@Autowired
private ConfigurableApplicationContext applicationContext;
@Value("${common.name}")
private String config;
//动态刷新方式2 @RefreshScope注解
@GetMapping("getConfig")
public String getConfig(){
return config;
}
@GetMapping("getConfig1")
public String getConfig1(){
return applicationContext.getEnvironment().getProperty("common.name");
}
}
4.访问测试
不同项目会获取到不同的配置
nacos管理界面修改yaml后,不用重启项目,直接请求接口,配置会自动刷新
扩展配置dataId
一个项目要用到多个nacos配置文件怎么办?
nacos发布两个配置
# 配置一
namespace: 2d108db1-4b7b-4175-8012-be00d735ea8a # 开发环境
Data ID: ext.config01.properties
Group : ext_group
配置格式: properties
配置内容:
common.age=18888
common.address=beijing
# 配置2
namespace: 2d108db1-4b7b-4175-8012-be00d735ea8a # 开发环境
Data ID: ext.config02.properties
Group : ext_group
配置格式: properties
配置内容:
common.age=288
common.address=shanghai
common.string=jpy
bootstrap.yml
server:
port: 56010
spring:
application:
name: service1
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: 2d108db1-4b7b-4175-8012-be00d735ea8a
file-extension: yaml
group: test_group
# 是否自动刷新配置true,默认true
refresh-enabled: true
# 这里加载了另外两个配置文件
extension-configs:
- data-id: ext.config01.properties
group: ext_group
refresh: true
- data-id: ext.config02.properties
group: ext_group
refresh: true
Test.java
//多个配置文件中如果只有一个common.age直接返回
//有多个common.age,主配置(service1.yaml)中有就返回主配置的
//扩展配置中有多个commn.age,则返回bootstrap.yml中扩展配置中最后一个中的common.age
@RestController
@RefreshScope
public class TestController {
//多个配置文件中如果只有一个common.age直接返回
//有多个common.age,主配置中有就返回主配置的
//扩展配置中有多个commn.age,则返回bootstrap.yml中扩展配置中最后一个中的common.age
@Value("${common.age}")
private String extConfigAge;
//获取扩展配置
@GetMapping("getExtConfigAge")
public String getExtConfigAge(){
return extConfigAge;
}
@Value("${common.string}")
private String extConfigString;
@GetMapping("getExtConfigName")
public String getExtConfigName(){
return extConfigString;
}
}
总结配置优先级:项目名.yaml > 扩展dataId(越靠下越优先)> shar-dataids
关闭配置
bootstrap.yml
spring:
cloud:
nacos:
config:
enabled: false # 关闭配置
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2021-01-25 MQ概述
2021-01-25 缓存穿透,击穿,雪崩
2021-01-25 Redis操作数据命令