作者 | 遗失的拂晓
来源 | 公众号「锅外的大佬」
在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean 上是非常有用的。但是,记录这些属性的最好方法是什么呢?
在本教程中,我们将探讨 Spring Boot Configuration Processor 和 关联的 JSON 元数据文件,该 JSON 文档记录每个属性的含义、约束等。
作为开发人员,我们开发的大多数应用程序在某种程度上必须是可配置的。但是在通常情况下,我们并不能够真正的理解配置参数的作用,比如它有默认值,又或者是过时的,有时我们甚至不知道该属性的存在。
为了帮助我们理清楚,Spring Boot 生成了配置元数据的 JSON 文件,为我们提供关于如何使用属性的有用信息。所以,配置元数据是一个描述性文件,它包含与配置属性交互所需的必要信息。
这个文件的好处是 IDE 也能读懂它,从而为我们提供自动完成 Spring 属性配置的工作,以及其他配置提示。
为了生成此配置元数据,我们将使用 _spring-boot-configuration-processor_ 的依赖.
因此,让我们继续将依赖项添加为_可选依赖_ :
<dependency>
这种依赖关系将为我们提供在构建项目时调用的 Java 注解处理器。我们稍后会详细讨论这个问题。
为了防止 _@ConfigurationProperties_ 不应用于我们的项目使用的其他模块,在 Maven 中添加依赖项为_可选依赖_ 是最好的做法。
现在来研究处理器是怎么工作的,我们需要使用 Java bean 获取在 Spring Boot 应用程序中包含一些属性:
@Configuration
要做到这一点,我们可以使用 _@ConfigurationProperties_ 注解。配置处理器会扫描使用了此注解的类和方法,用来访问配置参数并生成配置元数据。
让我们将这些属性中添加到属性文件中。在示例中,我们把文件命名为 _databaseproperties-test.properties_:
#Simple Properties
我们还将添加一个测试,以确保我们都做对了:
@RunWith(SpringRunner.class)
我们通过内部类 _Server_ 还添加了嵌套属性 _database.server.id_ 和 _database.server.port_ 。我们应该添加内部类 Server 以及一个 server 的属性并且生成他的 getter 和 setter 方法。
在我们的测试中,让我们快速检查一下,确保我们也可以成功地设置和读取嵌套属性:
@Test
好了,现在我们准备好来使用处理器了。
我们在前面提到过,配置处理器生成一个文件 – 它是使用注解处理实现的。
所以,在编译我们的项目之后,我们将在目录 target/classes/META-INF 下看到文件名为 spring-configuration-metadata.json 的文件:
{
接下来,让我们看看更改 Java bean 上的注解如何影响元数据。
首先,让我们将 JavaDoc 注释添加到_Server_ 上.
第二,让我们给出一个 _database.server.port_ 字段的默认值并最后添加 _@Min_ 和 _@Max_ 注解:
public static class Server {
如果我们检查 _spring-configuration-metadata.json_ 文件,我们将看到这些额外的信息得到了反映:
{
我们可以找到 _database.server.ip_ 和 _database.server.port_ 属性的不同之处。事实上,额外的信息是非常有帮助的。开发人员和 IDE 都更容易理解每个属性的功能。
我们还应该确保触发构建以获得更新的文件。在Eclipse中,如果我们检查_自动生成_选项时,每个保存操作都将触发生成。在 IntelliJ 中,我们应该手动触发构建。
让我们仔细看看 JSON 元数据文件,并讨论其组成。
_Groups_ 是用于分组其他属性的较高级别的项,而不指定值本身。在我们的例子中,我们有_数据库_组,它也是配置属性的前缀。我们还有一个 _database_ 组,它是通过内部类把 _IP_ 和 _port_ 属性作为一个组。
_属性_是可以为其指定值的配置项。这些属性配置在后缀为 *.properties或 _.yml_ 文件中,并且可以有额外的信息,比如默认值和验证,就像我们在上面的示例中看到的那样。
_提示_是帮助用户设置属性值的附加信息。例如,如果我们有一组属性的允许值,我们可以提供每个属性的描述。IDE 将为这些提示提供自动选择的帮助。
配置元数据上的每个组成都有自己的属性。来解释配置属性的详细用法。
在本文中,我们介绍了 Spring Boot 配置处理器及其创建配置元数据的功能。使用元数据可以使与配置参数的交互变得更加容易。
我们给出了一个生成的配置元数据的示例,并详细解释了它的格式和组成。
我们还看到了 IDE 上的自动完成支持是多么有帮助。
与往常一样,本文中提到的所有代码片段都可以在我们的 GitHub 存储库。
本文通过OpenWrite的免费Markdown转换工具发布
-END-
留言交流不过瘾
关注我,回复“加群”加入各种主题讨论群
朕已阅
Original url: Access
Created at: 2019-11-07 09:13:28
Category: default
Tags: none
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论