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…

java lambda循环_使用Java 8 Lambda简化嵌套循环

java lambda循环对于每个经常需要在Java 8&#xff08;或更高版本&#xff09;中使用多维数组的人来说&#xff0c;这只是一个快速技巧。 在这种情况下&#xff0c;您可能经常会以类似于以下代码的结尾&#xff1a; float[][] values ... for (int i 0; i < values.leng…

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

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

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

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

php7.1 split,PHP 函数 split()

函数array split (string pattern, string string [, int limit])定义和用法返回一个字符串数组&#xff0c;每个单元为 string 经区分大小写的正则表达式 pattern 作为边界分割出的子串。如果设定了 limit&#xff0c;则返回的数组最多包含 limit 个单元&#xff0c;而其中最后…

java永生代和新生代_Java:永生的对象和对象的复活

java永生代和新生代什么是物体复活&#xff1f; 当没有其他对象引用该对象时&#xff0c;该Java对象可以进行垃圾回收。 当JVM&#xff1a;s垃圾收集器最终将要删除未使用的对象时&#xff0c;将调用该对象的finalize()方法。 但是&#xff0c;如果我们再次使用对象自己的final…

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

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

python和c#哪个简单-最近学习 Python 的一些感触 (对比 C#)

反驳下Pythoner说的简单 之前很多人都说Python用起来简单&#xff0c;我的第一感觉就是胡扯&#xff0c;现在我稍微学了一点&#xff0c;更加坚信了那是胡扯。 当然Python在很小很小的项目里面可能是简单&#xff0c;例如Python写一个HelloWorld&#xff0c;其只要一句print &q…

霍普分叉matlab程序,基于MATLAB_GUI的Kalman滤波程序

第1章Kalman滤波理论1.1 Kalman滤波理论的应用背景信号是传递和运载信息的时间或空间函数。信号有两类&#xff0c;即确定性信号和随即信号。确定性信号的变化规律是既定的&#xff0c;可以表示为一确定的时间函数或空间函数&#xff0c;具有确定的频谱特性&#xff0c;如阶跃信…

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

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

【开源项目】QT播放PCM音频实例详细

#include<QtCore/QCoreApplication> #include<QAudioFormat> #include<QAudioOutput> #include<QThread> #include<iostream> using namespace std; //准备好PCM数据 //ffmpeg -i PP.mp4 -f s16le out.pcm int main(int argc, char *argv[]) {Q…

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

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

java与java ee_Java EE 8 MVC:全局异常处理

java与java ee在之前的先前文章中&#xff0c;我们了解了在Java EE MVC中访问请求信息&#xff08;例如查询或路径参数 &#xff09;的各种方法。 这篇文章显示了如何将全局异常处理应用于MVC应用程序。 假设我们有一个控制器方法可能抛出IllegalArgumentException&#xff1a…

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

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

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

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

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

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

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

时间序列分析&#xff1a;二阶自回归过程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的傻瓜式方法

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