apllo开源分布式配置中心详解
作者:DaveCui 发布时间:2022-01-25 22:39:01
什么是apllo开源分布式配置中心?
apllo开源分布式配置中心是携程框架部门研发的一个能够集中化管理应用的不同环境、不同集群的配置,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
apllo开源分布式配置中心有什么优势?
apllo开源分布式配置中心有以下几个优势:
支持多种数据格式(properties, xml, json, yaml, txt等)
支持多种语言(Java, .Net, Go等)
支持多种环境(DEV, FAT, UAT, PRO等)
支持多种集群(default, shanghai, beijing等)
支持多种命名空间(namespace),可以将不同的配置放到不同的命名空间中
支持灰度发布和回滚功能
支持修改推送和实时生效
支持权限控制和审计功能
如何部署apllo开源分布式配置中心?
部署apllo开源分布式配置中心需要以下几个步骤:
下载并解压apollo-build-scripts.zip文件
修改build.sh文件中的数据库连接信息和端口号
运行build.sh文件生成可执行文件
运行startup.sh文件启动服务端
访问http://localhost:8070/进入控制台
如何在springBoot项目中获取apollo的配置?
在springBoot项目中获取apollo的配置需要以下几个步骤:
1. 在pom.xml文件中添加apollo-client依赖
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.8.0</version>
</dependency>
2. 在resources目录下创建META-INF/app.properties文件,并指定app.id和env属性
app.id=sample-app # 应用ID,与Apollo控制台保持一致
env=DEV # 环境,与Apollo控制台保持一致
3. 在application.yml或application.properties文件中指定apollo.bootstrap.enabled=true和apollo.meta=http://localhost:8080属性
# application.yml
apollo:
bootstrap:
enabled: true # 启用Apollo自动注入功能
meta: http://localhost:8080 # 指定Apollo服务端地址,也可以通过-D参数传递或者通过系统变量设置
4. 在springBoot项目中使用@Value或@ConfigurationProperties注解获取配置值
// 使用@Value注解获取单个值,需要指定${}占位符和默认值,如果没有默认值,则必须在Apollo控制台设置该值,否则会报错。
// 另外,如果想要实时更新值,还需要添加@RefreshScope注解。
@RestController
@RefreshScope // 实时更新注解
public class SampleController {
@Value("${timeout:100}") // 单个值注解
private int timeout;
@GetMapping("/timeout")
public int getTimeout() {
return timeout;
}
}
// 使用@ConfigurationProperties注解获取对象值,需要指定prefix属性,并且在类上添加@Component或@Bean注解。
// 另外,如果想要实时更新对象,还需要添加@RefreshScope注解。
@Component // 对象注解
@ConfigurationProperties
prefix="user" // 对象前缀
@RefreshScope // 实时更新注解
public class User {
private String name;
private int age;
// 省略getter和setter方法
}
// 在控制器中注入对象
@RestController
public class UserController {
@Autowired
private User user;
@GetMapping("/user")
public User getUser() {
return user;
}
}
5. ConfigService类来获取apollo的配置
我们公司用的是这个方法来获取配置
ConfigService类是apollo客户端提供的一个核心类,它可以通过静态方法getAppConfig()或者getConfig(namespace)来获取Config对象,然后通过Config对象的方法来获取配置值。
例如:
// 获取默认命名空间的配置
Config config = ConfigService.getAppConfig();
// 获取指定命名空间的配置
Config config = ConfigService.getConfig("test");
// 获取配置值,如果没有则返回默认值
String value = config.getProperty("key", "default");
// 添加配置变更 *
config.addChangeListener(new ConfigChangeListener() {
@Override
public void onChange(ConfigChangeEvent changeEvent) {
// 处理变更事件
}
});
使用ConfigService获取配置的优势是:
可以动态获取最新的配置,不需要重启应用
可以监听配置变更事件,实现自定义逻辑
可以支持多个命名空间和集群
来源:https://juejin.cn/post/7202602022355697724


猜你喜欢
- 子类重新实现父类的方法称重写;重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改;仅当返回值为类类型时,重写的方法才可
- 本文实例为大家分享了C#遍历文件夹获取指定后缀名文件的具体代码,供大家参考,具体内容如下问题描述:项目需要,要进行某文件夹下所有shp数据的
- 前言介绍了几篇 Hero 动画,我们来一个 Hero 动画应用案例。在一些应用中,列表的元素和详情的
- 本文实例讲述了C#导出数据到Excel文件的方法。分享给大家供大家参考。具体实现方法如下:/// <summary>/// 导出
- springboot项目部署平时我们在部署springboot打成jar方式部署得时候,大多数都会编写启动脚本,脚本有很多种写法,但大多数意
- 前言:IO流主要分为两大类,分别是字节流与字符流注意:1、音频文件、图片、视频(范围广),就用字节流2、只涉及到文本的,就用字符流使用字节流
- 本文实例讲述了java实现word文档转pdf并添加水印的方法。分享给大家供大家参考,具体如下:前段时间,项目需要自动生成word文档,用W
- 如今,企业级应用程序的常见场景是同时支持HTTP和HTTPS两种协议,这篇文章考虑如何让Spring Boot应用程序同时支持HTTP和HT
- 一、 springBoot + Mybatis配置完成后,访问数据库遇到的问题首先出现这个问题,肯定是xml文件与mapper接口没有匹配上
- 做Java的面试题时遇到了以下这题,百度了一下Math.round()的修约规则,有的说是四舍五入,有的说是四舍六入,发现和我学分析化学时用
- mybatis简单的CURD就不用多说了,网上相关博客文档一大堆。分析一下Mybatis里面的collection聚集查询。 假设一个班级有
- 本文实例讲述了java旋转二维数组的操作,分享给大家供大家参考。具体实现方法如下:package test;/* * &
- 一.瀑布模型瀑布模型严格遵循软件生命周期各阶段的固定顺序:计划、分析、设计、编程、训试和维护,上一阶段完成后才能进入到下一阶段, 整个模型就
- idea中的Maven导包失败问题解决总结1.先确定idea和Maven 的配置文件settings 没有问题找到我们本地的maven仓库,
- 前言SPI 全称为 Service Provider Interface,是一种服务发现机制。SPI 的本质是将接口实现类的全限定名配置在文
- spring boot RestTemplate 发送get请求踩坑闲话少说,代码说话RestTemplate 实例手动实例化,这个我基本不
- 前言:在java的网络通信中,两个不同节点的主机想要进行通信则可以通过建立Socket对象(相当于客户端主机,向服务端请求发送信息)和Ser
- 环境JDK 1.8Spring Boot 2.3.0.RELEASEMaven 3.6.1H2 数据库用户名密码登录首先,我们用 Sprin
- 前言最近使用QT中的QTextEdit控件,作为实时数据显示的UI,在一次写入超过多少k的时候循环写入则会卡顿,网上也没有什么好的解决方案,
- 今天给大家带来一个向右滑动销毁Activity的效果,Activtiy随着手指的移动而移动,该效果在Android应用中还是比较少见的,在I