Spring Bootstrap中具有配置元数据的高级配置

在简要介绍了配置元数据并涵盖了我之前的文章《 在Spring Boot中使用配置元数据Pimp您的配置》中的基础知识之后,现在该看看如何进一步执行此步骤并进一步自定义配置。 在这篇文章中,我计划提出对配置属性的弃用,并讨论各种值提供程序,这些值提供程序允许我经历过最舒适的应用程序配置之一(在尝试写出完整内容的同时,在配置中打错字的时代已经过去了。合格的类名称或资源路径–让我们高兴。

弃用财产

在进行配置时,一种确定的招致麻烦的方法是引入突然的,无记录的重大更改,这些更改可能导致应用程序初始化或运行时失败。 Spring Boot引入了一个选项,用于标记和记录要弃用的属性,以应对这种情况。 秉承简单声明的精神,一旦准备好一个新的(替换)属性,您要做的就是将deprecation JSON节点添加到property additional-spring-configuration-metadata.json文件的property描述中:

弃用财产

...
{"name": "my.property","defaultValue": "something","deprecation": {"replacement": "my.new-property","reason": "This property is no longer needed."}
}
...

重新编译项目后,支持此功能的工具将获取更改并根据其设置反映出来。 下图描绘了可用配置属性的列表,其中已弃用的属性已明确标记。

不推荐使用的财产清单

如果您已经在属性文件中的某个位置使用了不推荐使用的属性,则基于您使用的颜色主题和IDE,事情可能会变得有些奇怪。 我喜欢将IDEA与黑曜石主题结合使用,从而突出显示以下文本。 它本来可以做得更好,但是一旦您习惯了它,并理解了每种颜色代表什么,就没有问题了。 请记住一点。

过时的财产

您也可以更深入地了解为什么将此属性标记为不推荐使用。 只需调用此属性的文档(默认情况下,通过在IDEA中按CTRL + Q),您将看到类似于此窗口的内容,该窗口呈现了我先前在additional-spring-configuration-metadata.json文件中定义additional-spring-configuration-metadata.json 。 该查找适用于所有属性,并且取决于您的代码和其他配置元数据获得的详细程度和描述性。

不推荐使用的属性文档

链接到应该替换/替换当前属性的属性特别有用。 这意味着您可以使用意图操作(在IDEA中,默认情况下通过按ALT + ENTER调用)并执行已淘汰属性的单次替换。 万一属性值可以保持不变,您已经做好了一切。 否则,您还需要更新该值。 漂亮整齐!

不推荐使用的属性替换

价值提供者

值提供程序仅可用于手动提供的提示(使用文件additional-spring-configuration-metadata.json )。 Spring Boot将它们定义为一种描述属性潜在值列表的方法,通过关联提供程序以将明确定义的语义附加到属性,以便工具可以根据项目的上下文发现潜在值列表。 这听起来可能有点含糊,但是它确实是很酷的功能,它使您可以利用类层次结构,资源结构或Spring自己的上下文中的几乎所有方面。

类参考

让我们从一个非常简单但非常实用的东西开始-类引用提供程序。 如果我想根据应用程序的部署位置来配置应在应用程序中使用哪种策略,我可以实施几种策略实现并创建一个属性来捕获这一部分配置。 我的每个策略都实现一个IStrategy接口。 通过在hints additional-spring-configuration-metadata.json文件的hints部分中提供一个简单的提供程序声明,我可以大大简化该属性的填写。

类引用的例子

...{"name": "my.strategy","providers": [{"name": "class-reference","parameters": {"target": "com.jakubstas.s3downloader.strategy.IStrategy"}}]}
...

更新手动输入的元数据并重新编译项目后,策略属性将显示在可用属性列表中。 这里没有新内容。

类参考列表

但是,当涉及到值选择时,可用值列表仅限于已定义接口的实现。 当您需要配置要使用的类/实现或配置的任何其他方面时,这将很有用。

类引用属性

很棒的事情是,您不必费心为每个可用的类提供其他描述,因为您仍然可以使用文档查找操作(通过在IDEA中默认按CTRL + Q)。 这使开发人员可以简单地浏览可用选项,并非常舒适地选择最适合的选项,而不会费力。

类参考属性详细信息

处理为

请像处理另一个很酷的提供程序一样处理。 它允许您将属性的类型替换为更高级的类型。 这只是一种幻想的表达方式,您希望您的IDE将此字符串属性视为“资源”,而无需对任何给定的框架类(可能不在类路径上)创建显式依赖。 与先前讨论的提供程序相比,此提供程序就像变色龙–它允许自动完成诸如字符集,mime类型,枚举,语言环境或资源之类的东西,并且还支持集合的使用。

话虽这么说,我们可能希望在我们的应用程序中使用不同的条款和条件信息,并且还能够在每个版本的不同版本之间进行切换,而无需发布整个程序。 我的配置中引入了新属性来支持此要求。 通过像在此代码段中那样在Additional additional-spring-configuration-metadata.jsonhints部分中提供一个简单的提供程序声明,我将只能浏览我的资源并快速导航到我要使用的文件。

将属性作为资源处理

...{"name": "my.terms-and-conditions","providers": [{"name": "handle-as","parameters": {"target": "org.springframework.core.io.Resource"}}]}
...

呈现给您的第一件事是您要使用的资源类型的选择(是的,它支持资源字符串前缀:))。

资源属性

我想使用classpath资源,然后导航至文件。 由于您可能希望将文件夹本身用作资源,因此需要自己提供文件分隔符。

资产净值

其他

还有其他一些价值提供者值得一试,我将不像前两个那样详细讨论。 让我们快速看一下我们还能使用什么:

  • 任何
    • 允许提供任何附加值。
  • 记录器名称
    • 自动填写有效的记录器名称。
  • Spring Bean参考
    • 自动完成当前项目中的可用bean名称。
  • Spring资料名称
    • 自动完成项目中可用的Spring概要文件名称。

有关更多信息,请参阅附录B。

结论

这就是我在Spring Boot中关于配置元数据支持的全部内容。 我希望这两篇文章能激发您对这项功能进行自己的研究并尝试一下。 老实说,设置起来并不难,它使您的生活更轻松。 尽管这不是解决应用程序配置所有问题的万能解决方案,但我还是愿意像今天这样利用增量改进。 您对这种配置方法有何经验? 让我知道在评论部分。

翻译自: https://www.javacodegeeks.com/2016/02/advanced-config-configuration-meta-data-spring-bootstrap.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/336432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ssh 与 telnet 有何不同?_采用创新面料Nike Infinalon的全新瑜珈系列究竟有何不同?...

采用创新面料Nike Infinalon的全新瑜珈系列究竟有何不同?无拘无束自由运动——这是耐克瑜伽系列新品的核心设计理念。全新系列为你提供垫上瑜伽时毫无束缚的舒适感,采用了耐克创新型面料:Nike Infinalon。Nike Infinalon应用于耐克最新瑜伽系…

matlab中的导函数驻点,Matlab用导数作定性分析

Matlab用导数作定性分析5.1知识要点:函数作图 —用导数定性描述函数【 clf,xlinspace(-8,8,30);f(x-3).^2./(4*(x-1)); plot(x,f) 】【 fplot((x-3)^2/(4*(x-1)),[-8,8])) 】【 clf,xsym(x); f(x-3)^2/(4*(x-1)); ezplot(f,[-8,8]) ,ti…

原生态基于OpenCV图像处理软件开发

部分功能效果图 GitHub:https://github.com/CnYiXiaoNaiHe/OpenCV- 持续更新

git.exe 启动 慢_四川成都surface电脑启动到一半黑屏维修服务地址电话

联系人:刘工 欢迎来电 地址:成都市一环路南二段1号(磨子桥口)数码科技大厦(新世纪电脑城对面)4楼413专业surface全系列维修因为专注,所以专注,所以surface配件都有现货。微软电脑,微软平板电脑专业维修服务点surface R…

【FFMPEG应用篇】基于C++使用ffmpeg和QT开发播放器

音视频基础知识 1.MPEG-4是一套用于音频,视频信息的亚索编码标准。 2.常见的封装格式 MP4 MOV AVI:压缩标准可以任意选择 FLV :FLV封装格式详细参考 TS:直播流媒体使用; 3.常用视频编码格式 H264&#xff0…

java代码自动生成的插件_如何使用插件生成自定义Java 8代码

java代码自动生成的插件大多数程序员讨厌的一件事就是编写样板代码。 无休止的时间花费在设置实体类和配置数据库连接上。 为了避免这种情况,您可以让Speedment Open Source之类的程序为您生成所有这些代码。 这样可以很容易地以最少的人工就可以启动和运行数据库项…

PHP在Tomcat中CSS出错,tomcat找不到css怎么办

tomcat找不到css怎么办Tomcat找不到WEB下的Css文件,一般可以通过以下方式解决:将路径相对位置修改为域相对位置,如下:备注:WEB-INF不是公共访问目录,只有在Servlets的RequestDispatcher或JSPS的可以访问&am…

eve模拟器_《Re:从零开始的新伊甸征程》一步到位教你下载EVE手游

自从小生发布了《「EVE Echoes」萌新向完全入门指南》后有小伙伴回应不懂怎样下载游戏的问题,小生作为殷郡中的一名闲云野鹤也尽一点绵薄之力帮助各位,尽量为各位扫清前往新伊甸的“石头”吧。[酷]在开篇前小生可以大致明确告诉你,不要问小生…

【开源项目】QT OPENGL 与 shader 绘制展示视频代码实例 OPenGL直接显示YUV数据

本文使用QT中的QOpenGLFunctions(此类封装了OPenGL的方法,相当于QT版OPenGL) 其次重载 void paintGL(); void initializeGL(); void resizeGL(int width, int height);是基本操作 * 三种GLSL变量说明 * varying 顶点与片元共享 * attri…

java开发课程表_展示Java开发人员课程包

java开发课程表60个小时以上的课程,5门所有级别的课程:成为Java编程专家 嘿,怪胎, 本周,在我们的JCG Deals商店中 ,我们提供了一个极端的报价 。 我们提供的Java Developer Course Bundle 仅售39美元&am…

二阶自回归过程matlab,时间序列分析:二阶自回归过程

时间序列分析:二阶自回归过程Author: nex3z2019-07-131. 定义对于二阶自回归过程 $AR(2)$\begin{equation}X_t \phi_1 X_{t-1} \phi_2 X_{t-2} e_t \tag{1}\end{equation}假设 $e_t$ 独立于 $Y_{t-1}, Y_{t-2}, \cdots$。式 $(1)$ 也可以表示为\begin{equation}X…

m4s格式转换mp3_mp4怎么转换成mp3格式?mp4转mp3的傻瓜式方法

原标题:mp4怎么转换成mp3格式?mp4转mp3的傻瓜式方法或许对于很多小伙伴来说,要将视频改变一下格式就已经很难了,又何况是要将原本的视频改变成音频格式呢?一个是视频,一个是音频,压根就是风马牛…

Git安装及基本操作

1.安装Git 配置用户 git config --global user.name "用户名" git config --global user.email "邮箱"配置完成后查看配置 git config -l生成SSH秘钥 ssh-keygen -t rsa -C “邮箱” 输入完成后需要按3次Enter键 $ ssh-keygen -t rsa -C "邮箱&quo…

ZigBee网络数据传递流程_蓝牙、Wifi与ZigBee三种,这三种无线传输技术,谁能一统天下...

智能产品种类越来越多,运用在智能家居上的技术也越来越成熟。然而在无线通信协议上却一直无法做到统一,从目前的情况来看,短期内是无法实现这一愿望的了。既然如此,我们何不另辟蹊径,在这些标准中,选择优势…

千元平板电脑排行榜_最值得买的平板电脑推荐-最佳平板电脑品牌排行榜【2020年10月】...

平板电脑相较笔记本电脑而言,以其便携与功能强大的特点成为大家日常生活和工作的必备搭档,无论在性能配置上还是在内置软件应用方面,不同的使用场景有不同的需求。今天给大家推荐最佳平板电脑品牌排行,希望对大家选购平板电脑有帮…

java 枚举 菜鸟_2个菜鸟Java常量和枚举陷阱

java 枚举 菜鸟在对Java和Groovy代码进行的各种代码审查中,我经常看到魔术数字和其他随机字符串散落在整个代码库中。 例如,下面的(Groovy)代码段中的4.2是一个神奇的数字: if (swashbuckle > 4.2) {... }4.2是什…

python正则_python的正则表达式

上次小编写了正则表达式的用法,今天就小编就讲讲正则表达式再python中的应用,在python中想使用正则表达式就需要导入re模块。接下来小编将先介绍re模块中几个常见的函数findall:re.findall(‘正则表达式’,‘待匹配的内容’)例1:输…

公里与英里的换算c语言函数_60迈=60码=60公里?这三者天壤之别,可别搞错了

说到行车速度,大家经常用的是这三个单位:码、迈、公里/时,很多人以为这三者是同一个意思,都是每小时多少公里。实际上这三者并不等同,下面小编科普一下这几个词的差异。码1码不等于1公里,而是等于0.9144米&…

php3.2.3分组查询,ThinkPHP3.2.3版本如何设置应用分组

鑫强已经解决了我的解决方法是创建两个入口文件实际上我的目的就是想要达到两个模块共用一个配置文件和公共函数文件我的解决方法是在项目根目录下建立两个入口文件一个是Index.php与Root.php两个入口文件其中是这样写的Index.php{<?php #前台入口文件 header(Conte…