轻量级SpringBoot配置中心 - Minimal-Config
介绍
minimal-config-spring-boot-starter,是基于Spring-Boot原生配置注入实现原理的基础上,拓展的轻量级配置中心,项目体积只有24KB,设计理念为服务中小型项目,快速构建远程配置中心及配置实时刷新,本身提供了基于Gitee代码仓库的远程配置读取能力,开发者只需要简单配置资源文件路径和授权访问Token即可实现配置中心的功能。
开源项目地址:https://github.com/23557544/minimal-config-spring-boot-starter
欢迎大家提交PR
| 应用启动 | 配置刷新 | |
| 成员变量使用@Value注解 | 支持 | 支持 |
| 构造方法参数使用@Value注解 | 支持 | 暂不支持 |
| Set方法使用@Value注解 | 支持 | 暂不支持 |
| Spel表达式 | 支持 | 支持 |
注:暂不支持的功能,大家可以提交PR,或者等本人后期有空再行完善。
对比
Nacos和Apollo,前者是Spring Cloud Alibaba生态组件,后者是携程开源的配置中心中间件,两者有一个共同点是需要搭建服务端,其中阿里云的微服务引擎注册配置中心的价格,比单台ECS还贵,从成本角度考虑,不适合预算有限的中小型项目部署需求。
Spring Cloud Config,SpringCloud生态组件,同样支持使用Git代码仓库作为配置中间,需要同时依赖spring-cloud-config-server和spring-boot-starter-actuator,而且actuator设计的初衷是应用的健康监控,引入依赖后会增加很多用不上的功能,增加应用打包或者镜像体积。
使用
Maven引入minimal-config-spring-boot-starter依赖
<dependency>
<groupId>cn.codest</groupId>
<artifactId>minimal-config-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
使用Gitee代码仓库作为配置中心时,在SpringBoot配置文件中添加相应配置:
# gitee配置文件资源地址,通过Gitee Open API读取文件信息,查阅:https://gitee.com/api/v5/swagger
codest.config.gitee.url=https://gitee.com/api/v5/repos/仓库名称/项目名称/contents/demo.properties
# gitee授权访问token,登录Gitee在设置 - 安全设置 - 私人令牌中添加
codest.config.gitee.token=xxxx
通过实现RemoteConfigProvider接口自定义远程配置加载方式,可以根据自身需求,将配置信息放在数据库、文件系统或其它中间件持久化,同时实现配置项加载功能即可:
public interface RemoteConfigProvider {
Properties load();
}
在SpringBoot配置文件中指定配置源,指定配置项实现类后,不再加载git仓库配置项:
注意,配置中心通过EnvironmentPostProcessor完成初始化工作,此时例如日志、DataSource等组件还没有初始化完成
codest.config.provider=cn.codest.demo.provider.CustomConfigProvider
配置刷新
默认没有提供定时重载远程配置的功能,可以根据实际需求通过REST接口或者定时任务刷新配置,关键代码如下:
private final RefreshConfigExecutor executor;
@GetMapping("/refresh")
public String refresh() {
executor.execute();
return HttpStatus.OK.getReasonPhrase();
}
Demo
添加Maven依赖
<dependency>
<groupId>cn.codest</groupId>
<artifactId>minimal-config-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
配置Gitee代码仓库配置文件资源地址
codest.config.gitee.url=https://gitee.com/api/v5/repos/codest-c/config-folder/contents/demo.properties
codest.config.gitee.token=xxxx
Gitee代码仓库添加demo.properties配置文件
name=张三
month=1,2,3,4,5,6
Application代码
@RestController
@SpringBootApplication
public class ConfigDemoApplication {
private final static Logger log = LoggerFactory.getLogger(ConfigDemoApplication.class);
@Value("#{'Hi, ${name}'.concat('!')}")
private String name;
@Value("${month}")
private List<Integer> month;
private final RefreshConfigExecutor executor;
public ConfigDemoApplication(RefreshConfigExecutor executor) {
this.executor = executor;
}
public static void main(String[] args) {
SpringApplication.run(ConfigDemoApplication.class, args);
}
@GetMapping("/refresh")
public String refresh() {
executor.execute();
return HttpStatus.OK.getReasonPhrase();
}
@PostConstruct
@GetMapping("/print")
public void print() {
log.info(name);
log.info(month.toString());
}
}
项目启动完成后配置输出:
INFO 17184 --- [ main] c.c.configdemo.ConfigDemoApplication : Hi, 张三!
INFO 17184 --- [ main] c.c.configdemo.ConfigDemoApplication : [1, 2, 3, 4, 5, 6]
修改Gitee代码仓库中的配置文件如下:
name=李四
month=1,2,3,4,5,6,7,8,9,10,11,12
访问http://localhost:8080/refresh刷新配置,如下图

访问http://localhost:8080/print打印下刷新后的配置内容
INFO 7792 --- [nio-8080-exec-5] c.c.configdemo.ConfigDemoApplication : Hi, 李四!
INFO 7792 --- [nio-8080-exec-5] c.c.configdemo.ConfigDemoApplication : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
轻量级SpringBoot配置中心 - Minimal-Config的更多相关文章
- Spring Cloud配置中心(Config)
Spring Cloud配置中心(Config) Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件.比如:配置中心.Eureka服务发现. 消息总线.熔断机制等. 配置中心在 ...
- go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])
目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...
- Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)
技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启, ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(Config、Bus)
在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每 ...
- SpringCloud之配置中心(config)的使用
配置中心的作用就在于可以在项目启动时加载远程或本地的配置文件,将配置文件集中管理 springboot版本: 2.1.6.RELEASE springcloud版本: Finchley.RELEASE ...
- 玩转Spring Cloud之配置中心(config server &config client)
本文内容导航: 一.搭建配置服务中心(config server) 1.1.git方式 1.2.svn方式 1.3.本地文件方式 1.4.解决配置中包含中文内容返回乱码问题 二.搭建配置消费客户端( ...
- SpringCloud 进阶之分布式配置中心(SpringCloud Config)
1. SpringCloud Config SpringCLoud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用 的所有环境提供了一个中心化的外部配置; ...
- SpringCloud系列之配置中心(Config)使用说明
大家好,最近公司新项目采用SpingCloud全家桶进行开发,原先对SpringCloud仅仅只是停留在了解的初级层面,此次借助新项目的契机可以深入实践下SpringCloud,甚是Happy.大学毕 ...
- SpringCloud之配置中心(config)的使用Git+数据库实现
SpringCloud微服务实战系列教程 -------------------------目录------------------------------ 一.配置中心应用(Git) 二.配置中心的 ...
- SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版
前言 在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心( ...
随机推荐
- VMware三种连接模式的区别
安装了vm软件后,该软件会虚拟出两张虚拟网卡vmnet1和vmnet8 网卡在控制面板->网络和internet->更改适配器设置 三种网络连接模式: 桥接模式:使用主机的无线网卡或者有线 ...
- [ABC140F] Many Slimes
2023-02-13 题目 题目传送门 翻译 翻译 难度&重要性(1~10):6 题目来源 AtCoder 题目算法 贪心 解题思路 用了两个 multiset a 和一个 set s,一个 ...
- P1830题解
思路: 利用桶存储轰炸区域,双重循环. 在存储轰炸区域时将次数刷新,也就是pos[j][k]=i;. 下面是核心代码: for(int i=1;i<=x;i++) { int x1,x2,y1, ...
- Linux 内核音频子系统调试
debugfs 文件系统 debugfs 可以为 Linux 内核各个模块的分析调试,提供许多信息,如音频子系统的 ASoC,以及 tracing 等.debugfs 文件系统可以通过命令行工具挂载, ...
- numpy_tricks
Numpy Tricks 这篇文章不定期更新,主要是记录在使用numpy过程中一些有效的tricks(或者重要的API) import numpy as np numpy.where() numpy. ...
- 当你使用Taro时,你需要了解的一些事儿
2017 年 1 月 9 日凌晨,万众期待的微信小程序正式上线,前有跳一跳等爆圈小游戏的带动,后有特殊时期下各类健康码小程序的加持,小程序成为了国内技术圈独树一帜的存在.但随着小程序的迅猛发展,其实在 ...
- 聊一聊 TLS/SSL
哈喽大家好,我是咸鱼 当我们在上网冲浪的时候,会在浏览器界面顶部看到一个小锁标志,或者网址以 "https://" 开头 这意味着我们正在使用 TLS/SSL 协议进行安全通信.虽 ...
- oracle优化-分页查询的错误认识
对于分页查询,上一篇文章总结了实现分页查询的办法.同时给出等价写法,另外在执行计划角度验证SQL的等价性https://www.cnblogs.com/handhead/p/13856505.html ...
- 使用ensp搭建路由拓扑,并使用isis协议实现网络互通实操
转载请注明出处: 1.通过拓扑搭建如下拓扑: 其中R7.R8为L1,R6为L1/2,R9为L2. 2.配置isis实现网络互通 R7配置如下: [Huawei]isis 1 [Huawei-isis- ...
- WEB项目开发流程介绍
web开发流程 web开发流程图 一.需求分析阶段 在需求分析阶段,即上图所述 "需求明确"之前的阶段 产品经理PM召集需要项目相关人员,开需求讨论会.讲解原型 相关人员需要以此了 ...