介绍

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的更多相关文章

  1. Spring Cloud配置中心(Config)

    Spring Cloud配置中心(Config) Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件.比如:配置中心.Eureka服务发现. 消息总线.熔断机制等. 配置中心在 ...

  2. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])

    目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...

  3. Spring Boot + Spring Cloud 实现权限管理系统 配置中心(Config、Bus)

    技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每个项目都散落着各种配置文件,且随着服务的增加而不断增多.此时,往往某一个基础服务信息变更,都会导致一系列服务的更新和重启, ...

  4. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(二十三):配置中心(Config、Bus)

    在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin 技术背景 如今微服务架构盛行,在分布式系统中,项目日益庞大,子项目日益增多,每 ...

  5. SpringCloud之配置中心(config)的使用

    配置中心的作用就在于可以在项目启动时加载远程或本地的配置文件,将配置文件集中管理 springboot版本: 2.1.6.RELEASE springcloud版本: Finchley.RELEASE ...

  6. 玩转Spring Cloud之配置中心(config server &config client)

     本文内容导航: 一.搭建配置服务中心(config server) 1.1.git方式 1.2.svn方式 1.3.本地文件方式 1.4.解决配置中包含中文内容返回乱码问题 二.搭建配置消费客户端( ...

  7. SpringCloud 进阶之分布式配置中心(SpringCloud Config)

    1. SpringCloud Config SpringCLoud Config 为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用 的所有环境提供了一个中心化的外部配置; ...

  8. SpringCloud系列之配置中心(Config)使用说明

    大家好,最近公司新项目采用SpingCloud全家桶进行开发,原先对SpringCloud仅仅只是停留在了解的初级层面,此次借助新项目的契机可以深入实践下SpringCloud,甚是Happy.大学毕 ...

  9. SpringCloud之配置中心(config)的使用Git+数据库实现

    SpringCloud微服务实战系列教程 -------------------------目录------------------------------ 一.配置中心应用(Git) 二.配置中心的 ...

  10. SpringCloud学习系列之五-----配置中心(Config)和消息总线(Bus)完美使用版

    前言 在上篇中介绍了SpringCloud Config的使用,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的分布式配置中心( ...

随机推荐

  1. 头疼!卷积神经网络是什么?CNN结构、训练与优化一文全解

    本文全面探讨了卷积神经网络CNN,深入分析了背景和重要性.定义与层次介绍.训练与优化,详细分析了其卷积层.激活函数.池化层.归一化层,最后列出其训练与优化的多项关键技术:训练集准备与增强.损失函数.优 ...

  2. 从达梦数据库到Oracle数据库的性能测试数据迁移和导入优化

    为了在同样的数据基础上对比达梦数据库和Oracle数据库的业务性能,我们需要将达梦数据库的数据导入到Oracle数据库中.本文将提供一种思路来解决导入过程中遇到的问题及存在问题记录. 数据库版本信息 ...

  3. 如何创建集成 LSP 支持多语言的 Web 代码编辑器

    对于一个云开发平台来说,一个好的 Web IDE 能很大程度地提高用户的编码体验,而一个 Web IDE 的一个重要组成部分就是代码编辑器. 目前有着多款 web 上的代码编辑器可供选择,比如 Ace ...

  4. Spring Boot虚拟线程与Webflux在JWT验证和MySQL查询上的性能比较

    早上看到一篇关于Spring Boot虚拟线程和Webflux性能对比的文章,觉得还不错.内容较长,我就不翻译了,抓重点给大家介绍一下这篇文章的核心内容,方便大家快速阅读. 测试场景 作者采用了一个尽 ...

  5. Solution -「洛谷 P7395」「CoE-I 2021C」弹珠游戏

    Description Link. 游戏在 \(4\times4\) 的菱形棋盘上进行: 两名玩家轮流放置弹珠,可以在横向.纵向.\(45\) 度斜线.\(135\) 度斜线方向未放置弹珠的位置连续放 ...

  6. 记一次 .NET 某仪器测量系统 CPU爆高分析

    一:背景 1. 讲故事 最近也挺奇怪,看到了两起 CPU 爆高的案例,且诱因也是一致的,觉得有一些代表性,合并分享出来帮助大家来避坑吧,闲话不多说,直接上 windbg 分析. 二:WinDbg 分析 ...

  7. Llama2-Chinese项目:4-量化模型

    一.量化模型调用方式   下面是一个调用FlagAlpha/Llama2-Chinese-13b-Chat[1]的4bit压缩版本FlagAlpha/Llama2-Chinese-13b-Chat-4 ...

  8. 实训——基于大数据Hadoop平台的医疗平台项目实战

    文章目录 医疗平台项目描述 数据每列的含义 数据分析业务需求 架构图 成果图 环境搭建 非常感谢各位的认可,最近太多人找我问东问西,故在此进行说明一下: 首先这个是在Linux上基于Hadoop的搭建 ...

  9. Arduino – Turn LED ON and OFF With Button

    In this Arduino tutorial I will show you how to turn an LED on and off with a push button. In fact, ...

  10. MySQL快速导入千万条数据(2)

    目录 一.导入前1000万条数据 二.导入前2000万条数据 三.导入后面的1000万条数据 四.建索引 五.总结 接上文,继续测试3000万条记录快速导入数据库. 一.导入前1000万条数据 清库. ...