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.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/354422.shtml

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

相关文章

windows系统服务器添加ssl证书

一、为域名申请证书 浏览器打开后系在对应版本: https://keymanager.org/ 注册账号: https://freessl.cn/ 安装刚刚下载的软件; 登录进去就可以申请域名的证书了 二、域名解析 解析完后倒回软件那点击“配置完成,检查一下” …

使用ANTLR在5分钟内用Java解析任何语言:例如Python

我喜欢出于多种目的处理代码,例如静态分析或自动重构。 对我来说,有趣的部分是推理从抽象语法树(AST)构建的模型。 为此,您需要一种从源文件中获取AST的方法。 使用ANTLR和完整的语法集合可在此处轻松完成:…

linux服务器配置ssl证书

一、申请ssl证书 这里有申请域名的ssl证书的步骤: https://blog.csdn.net/weixin_38797742/article/details/109471250 二、配置服务器 打开项目对应的配置文件,配置图中三行信息,端口、还有申请的证书的所在目录。 listen 443 ssl; ssl_…

视图层的数据绑定

数据绑定WXML 中的动态数据均来自对应 Page 的 data。 只要把data中的数据改变,视图层就会自动改变,无需使用DOM操作。 简单绑定数据绑定使用 Mustache 语法(双大括号)将变量包起来 使用方法: {{ 内容 }} 在组件中使用…

【原创】Linux安装Redis

【注】说是原创其实是从各个博客中copy出来的,不过经本人总结,也算是半个原创吧,哈哈... 1.安装环境: 2.安装步骤 2.1 安装目录 cd /usr/local mkdir redis 2.2 下载包 wget http://download.redis.io/releases/redis-3.2.11.tar…

原型链继承

转载于:https://www.cnblogs.com/cmblog/p/8079773.html

java线程死锁_Java线程死锁–案例研究

java线程死锁本文将描述从在IBM JVM 1.6上运行的Weblogic 11g生产系统中观察到的最新Java死锁问题的完整根本原因分析。 此案例研究还将证明掌握线程转储分析技能的重要性; 包括用于IBM JVM Thread Dump格式。 环境规格 – Java EE服务器:Oracle Weblo…

linux下安装pm2

提前安装node linux下安装pm2 全局安装 npm install pm2 -g安装完成后可以查看pm2的所在目录 创建软连接----根据上面的安装目录创建 ln -s /home/node/nodejs/lib/node_modules/pm2/bin/pm2 /usr/local/bin/查看进程 pm2 list安装成功!!&#xff…

主机关机后第二天就无法开机_工控机几种常见的在开机或关机后不能正常使用的故障处理方法汇总...

工控机开机启动时我们经常会碰到各种不能正常使用的问题,下面我们把这类故障现象及处理方法在这里给大家汇总分析一下,希望你在碰到类似的问题时,能给你们提供一定的帮助!故障现象一:工控机在开机过程中出现死机故障.故…

网站添加页面热力图--百度统计

1,注册百度统计的账户并登录 https://tongji.baidu.com/web/10000307684/welcome/login 2,新增网站 管理-网站列表-自有网站-新增网站 3,新增网页热力图 基础报告-页面点击图-新增点击图 4,复制统计代码 把统计的代码放到…

pandas中inplace_pandas回顾小结(二)

上一篇:橘猫吃不胖:pandas回顾小结(一)​zhuanlan.zhihu.comIndexIndex也有很多种类型,官方文档介绍:Index objects - pandas 1.1.4 documentationindex是可以包含重复值的df pd.DataFrame([[1,2,3],[4,5,…

Swing应用程序中的CDI事件可将UI与事件处理分离

在享受了几年围绕CDI构建我的代码的乐趣之后,使用它根据众所周知的模式来构造我的代码非常自然。 CDI是一种旨在在Java EE应用程序服务器中使用的依赖项注入机制,这可能被视为不利。 但是,我想证明它可以在Java SE应用程序中使用并且具有巨大…

keras 多层lstm_机器学习100天-Day2403 循环神经网络RNN(训练多层RNN)

说明:本文依据《Sklearn 与 TensorFlow 机器学习实用指南》完成,所有版权和解释权均归作者和翻译成员所有,我只是搬运和做注解。进入第二部分深度学习第十四章循环神经网络循环神经网络可以分析时间序列数据,诸如股票价格&#xf…

新手上路之django项目开发(一)-----创建项目并运行

一,创建项目 1,PyCharm创建 或者 2,django-admin startproject mysite mysite 是项目名。 二,配置settings.py文件 创建templates目录,static目录 settings.py文件中加入:os.path.join(BASE_DIR, ‘tem…

lisp语言画阿基米德线_中国油画艺术表达着艺术家思想情感,而且展现了油画语言独特之美...

感谢大家阅读,在阅读之前,麻烦您先点击上面的“蓝色字体”,再点击“关注”, 因为微信更改了推送规则,推文不再按照时间线显示,如果不点『在看』或者没有『星标』,可能就看不到我们的推送了&…

java btrace_BTrace for Java应用程序简介

java btrace本文的目的是学习如何使用BTrace动态跟踪/观察正在运行的Java应用程序(JDK 6),而无需更改应用程序的代码和配置参数。 什么是BTrace? BTrace是一个开源项目,始于2007年,最初由A.Sundararajan和…

我的世界javamod怎么装_「装修细节」除了中央空调外的高颜值装空调大法

一直觉得中央空调是高颜值神器但是对于我这种万年单身狗在考虑开启率的情况下好像还是风管机和挂机比较实用但是又嫌弃挂机的电线冷凝水管丑到不行直到我看到了-----管线背出的挂机仿佛开启了新世界的大门| 怎么做到的 |我问了好多卖中央空调的有没有管线背出的挂机都和我说不清…

rm删除文件显示:Operation not permitted

当需要删除某个文件夹或者文件时,提示Operation not permitted,表示不允许操作。 解决方法如图 chattr -i .user.ini 注释: rm -rf 目录名字 :删除 -r 就是向下递归,不管有多少级目录,一并删除 -f 就是直…

sublime 代码格式化

插件: SublimeAStyleFormatter Package Control Messages SublimeAStyleFormatter---------------------- SublimeAStyleFormatter SublimeAStyleFormatter is a simple code formatter plugin for Sublime Text 2. It provides ability to format C, C, C#, and J…

Linux下安装并使用MySQL数据库

注意:如果是配合python使用的话,连接数据库的时候注意python2使用的是mysqldb,python3使用的是pymysql。详细看第三点。 一,首先设置安全组 开放MySQL的默认端口3306 二,安装MySQL服务 在官网查找最新版本的下载链…