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将此字符串属性视为Resource,而不对可能不在类路径中的任何给定框架类创建显式依赖。 与先前讨论的提供程序相比,此提供程序就像变色龙–它允许自动完成诸如字符集,mime类型,枚举,语言环境或资源之类的东西,并且还支持集合的使用。
话虽如此,我们可能希望在我们的应用程序中使用不同的条款和条件信息,并且还能够在每个版本的不同版本之间进行切换,而无需发布整个程序。 我的配置中引入了新属性来支持此要求。 通过像在此代码段中那样在Additional additional-spring-configuration-metadata.json
的hints
部分中提供一个简单的提供程序声明,我将只能浏览我的资源并快速导航到要使用的文件。
将属性作为资源处理
...{"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
Spring Bootstrap中带有配置元数据的高级配置相关推荐
- Spring Bootstrap中具有配置元数据的高级配置
在简要介绍了配置元数据并涵盖了我之前的文章< 在Spring Boot中使用配置元数据Pimp您的配置>中的基础知识之后,现在该看看如何进一步执行此步骤并进一步自定义配置. 在这篇文章中, ...
- Spring Boot中带有CKEditor的AJAX
1.概述 在本文中,我们将介绍如何在Spring Boot中使用CKEditor . 在本教程中,我们将导入一个包含大量数据的XML文档,对使用GET请求将一组数据加载到CKEditor实例的能力进行 ...
- Spring Boot中使用MongoDB的连接池配置
因为今天开发遇到了性能问题,可能与MongoDB的连接有关,所以稍稍深入看了一下,正好搜到原来有人写过这篇相关的内容,所以转载过来.回头有时间可以写个扩展到SpringForAll里,主体思路还是一样 ...
- asa清空配置_Cisco ASA 高级配置
Cisco ASA 高级配置 一.防范IP分片攻击 1.Ip分片的原理: 2.Ip分片的安全问题: 3.防范Ip分片. 这三个问题在之前已经详细介绍过了,在此就不多介绍了.详细介绍请查看上一篇文章:I ...
- spring aop中的propagation的7种配置的意思
转自:https://nannan408.iteye.com/blog/1754882 1.前言. 在声明式的事务处理中,要配置一个切面,即一组方法,如 Java代码 <tx:advice ...
- spring mvc 中对静态资源的访问配置
在web.xml中配置spring mc servlet 对url-pattern设置时,排除在spring的servlet之外. <servlet><servlet-name> ...
- Spring Cloud中Eureka开启密码认证----(springcloud配置系列一)
转载自 https://blog.csdn.net/u011499747/article/details/77410997 Eureka服务端配置 添加spring-boot-starter-secu ...
- Spring Boot中如何扩展XML请求和响应的支持
在之前的所有Spring Boot教程中,我们都只提到和用到了针对HTML和JSON格式的请求与响应处理.那么对于XML格式的请求要如何快速的在Controller中包装成对象,以及如何以XML的格式 ...
- Spring容器中获取Bean实例的七种方式(附实战源码)
目录 写作说明 一:写作原因 二:源码出处 实现方式 一:使用BeanFactory直接获取(不推荐) 二:在初始化时保存ApplicationContext对象 三:继承自抽象类Applicatio ...
最新文章
- 中国算力发展指数白皮书(2021)
- SourceForge 停止在被遗弃项目捆绑第三方软件
- 代币转账_手把手教你从源代码开始搭建多节点以太坊私链(五)部署智能合约及代币发行...
- python 数字证书模拟登录_用于生成WebService使用的数字证书及签署证书.python脚本...
- POJ 1273 (基础最大流) Drainage Ditches
- php把语音转成帧,[转载]用TCP/IP实现自己简单的应用程序协议:成帧器部分
- Floppy Zip Disk Rescue注册码分析
- python简单程序实例-python下10个简单实例代码
- SQL Server里的闩锁介绍
- R语言_安装包时联网失败
- 大一计算机基础教程期末考试,大一大学计算机基础教程期末考试题.doc
- dataframe按照拼音排序
- java虚拟机开源_IBM J9 Java虚拟机正式开源
- OC.Gen-X:一键生成黑苹果 OpenCore EFI 引导文件
- 王牌战争文明重启服务器维护中,王牌战争文明重启常见问题解答-王牌战争文明重启常见问题一览_牛游戏网...
- java 自行车_JAVA 2020款山地车盘点
- HDU6194(后缀数组)
- 电商系统-优惠券部分设计
- 全部40个博客网站排名
- 体外诊断(POCT)之检测卡配置文件