导读:Spring Boot jar 包含元数据文件,提供所有支持的配置属性的详细信息。该文件旨在让 IDE 开发者提供上下文相关的帮助和“代码完成”。总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发。
一、背景
最近在调试reactive-steams
源码的时候看到spring-boot
源码包里面的
-
spring-configuration-metadata.json
-
additional-spring-configuration-metadata.json
![](https://static001.geekbang.org/infoq/1e/1ec521896eec9af076f195091ca9aa0e.webp?x-oss-process=image/resize,p_80/format,jpg)
说实话主要是metadata
吸引了我,因为最近在调整引擎元数据管理确实折腾了很久。
查了官方的资料发现这里也是 SpringBoot 提供的元数据配置拓展,但是这里的元数据不是只在 Spring bean 管理的元数据类似。
▐ 官方解释
![](https://static001.geekbang.org/infoq/06/066a01d05710ab4d992a3cf9b1e2489f.webp?x-oss-process=image/resize,p_80/format,jpg)
访问地址:https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/configuration-metadata.html#configuration-metadata-additional-metadata
简单点可以理解为这类元数据的配置时为了让我们在使用 IDEA 开发的过程中,使用application.properties
或者 application.yml
配置的时候更有注释说明,更方便我们开发使用。
▐ 官方案例
以我们常用的 logging 配置为例
-
元数据配置
![](https://static001.geekbang.org/infoq/77/77a2bbb28295871585567abf5cb42c3e.webp?x-oss-process=image/resize,p_80/format,jpg)
![](https://static001.geekbang.org/infoq/c6/c6e2be7e4ac9f7deb0a7e544ec5a1520.webp?x-oss-process=image/resize,p_80/format,jpg)
-
定义配置
![](https://static001.geekbang.org/infoq/85/85583b6ceeee44ac80cf7a85dcff4306.webp?x-oss-process=image/resize,p_80/format,jpg)
二、应用实例
▐ 插件工厂配置定义
配置元数据文件位于 jar 下面。META-INF/spring-configuration-metadata.json
它们使用简单的 JSON 格式,其中的项目分类在“groups”或“properties”下
![](https://static001.geekbang.org/infoq/e4/e49e27bc6971efe45a6efdde0ebc9129.webp?x-oss-process=image/resize,p_80/format,jpg)
大部分元数据文件是在编译时通过处理所有带注释的项目自动生成的
@ConfigurationProperties 可以查看先前的文章
@EnableConfigurationProperties 的工作原理
参考下面 properties 表格进行配置上的理解。
![](https://static001.geekbang.org/infoq/26/2607054a1f3759edccfb2884ceacbee2.webp?x-oss-process=image/resize,p_80/format,jpg)
deprecation 每个 properties 元素的属性中包含的 JSON 对象可以包含以下属性:
![](https://static001.geekbang.org/infoq/be/be6c3f55853dd65901a18d9bbf3feb95.webp?x-oss-process=image/resize,p_80/format,jpg)
▐ 插件工厂配置注入
▐ 配置应用
![](https://static001.geekbang.org/infoq/24/24ae5b83723c841c8579e08b58bb1422.webp?x-oss-process=image/resize,p_80/format,jpg)
![](https://static001.geekbang.org/infoq/3f/3f9a7e2753d445ed01be7bc0be146973.webp?x-oss-process=image/resize,p_80/format,jpg)
三、总结
对于元数据配置,理解起来不难!主要为了组件库为了让使用者更加优化使用提供的一套 IDEA 提示说明。借此我们在开放私有组件或者插件的时候在对于配置项可对外提供开放能力,可以根据元数据配置来完善 IDEA 提示说明。这样其他人用起来的时候能很快知道对应的参数的配置类型以及相关的配置属性说明。总结本篇文章希望对从事相关工作的同学能够有所帮助或者启发
往期推荐
![](https://static001.geekbang.org/infoq/9e/9e4f37b72dc74b38ee8ff38c0a795000.jpeg?x-oss-process=image/resize,p_80/auto-orient,1)