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,一经查实,立即删除!

相关文章

设计模式のStrategyPattern(策略模式)----行为模式

一、问题产生背景 当我们进行一系列处理时(员工工资核算,会员管理,计算器,优惠活动),会有很多相似的算法和处理过程,只是由于具体的算法的差异,导致必须不同处理。这些处理和客户端无…

linux安装虚拟环境virtualenv

(安装虚拟环境,不然会和其他环境冲突) https://blog.csdn.net/wtwcsdn123/article/details/88653179 https://blog.csdn.net/u011798443/article/details/80881931(超详细) pip install virtualenv 创建python3环境 …

windows系统服务器添加ssl证书

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

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

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

[转]Global exception handling in Web API 2.1 and NLog

本文转自:https://stackoverflow.com/questions/25865610/global-exception-handling-in-web-api-2-1-and-nlog In Web API 2.1 is new Global Error Handling. I found some example how to log exceptions into Elmah ( elmah sample ). But I use NLog to log er…

linux服务器配置ssl证书

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

将自定义的集合数据使用pagehelper进行分页

PageHelper 是一个用于在 MyBatis 中进行分页查询的插件,它主要设计用于对从数据库查询的结果进行分页。 如果数据不是直接从 MySQL 数据库中查询得到,而是已经存在于内存中的集合(如 List、ArrayList 等),你可以通过以…

视图层的数据绑定

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

使用dwebsocket在Django中使用Websocket

一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接…

ejb 2.0 3.0_Java EE 6测试第I部分– EJB 3.1可嵌入API

ejb 2.0 3.0我们从Enterprise JavaBeans开发人员那里听到的最常见的请求之一就是需要改进的单元/集成测试支持。 EJB 3.1规范引入了EJB 3.1可嵌入API,用于在Java SE环境中执行EJB组件。 与传统的基于Java EE服务器的执行不同,可嵌入式用法允许客户端代码…

如何添加自动更新Play Framework 2.X项目的版本号

我想拥有要发布新版本时自动更新的版本号,因此我着手了解如何使用Play Framework进行此操作。 我发现我可以将其基于sbt-release插件,但是并不是那么简单。 这是我的策略,因此最后我要做的就是运行“ activator release ”: 1.添…

JS容易犯错的this和作用域

var someuser { name: byvoid, func: function() {console.log(this.name); }}; var foo { name: foobar};someuser.func(); // 输出 byvoidfoo.func someuser.func; foo.func(); // 输出 foobarname global;func someuser.func; func(); // 输出 global在 JavaScript 中,…

【原创】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…

前端:屏蔽F12审查元素,禁止修改页面代码

一、屏蔽F12 审查元素 document.onkeydown function(){if(window.event && window.event.keyCode 123) {alert("F12被禁用");event.keyCode0;event.returnValuefalse; } if(window.event && window.event.keyCode 13) {window.event.keyCode 50…

SDN第四次作业

ryu控制器 ryu架构清晰,支持OpenFlow全部版本,采用Python语言进行APP开发。其上层为OpenStack和Web提供了编程接口,中间为Ryu自行研发的应用组件,最下层为Ryu底层实现的基本组件。 onos控制器 onos是面向运营商网络的SDN操作系统,采用java语言…

resteasy_RESTEasy教程第2部分:Spring集成

resteasyRESTEasy提供了对Spring集成的支持&#xff0c;这使我们能够将Spring bean作为RESTful WebServices公开。 步骤&#xff03;1&#xff1a;使用Maven配置RESTEasy Spring依赖项。 <project xmlnshttp:maven.apache.orgPOM4.0.0 xmlns:xsihttp:www.w3.org2001XMLSche…

前端代码加密

虽然浏览器会把加密的代码破解在解析&#xff0c;但是还是可以稍微加密&#xff0c;或者人家就是破解不了呢哈哈哈哈&#xff01;&#xff01;&#xff01; 1、脚本之家 推荐&#xff1a;HTML原代码加、解密脚本 https://www.jb51.net/tools/html_jiami.htm CSS代码格式化和…

原型链继承

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

清洁责任–摆脱均等,compareTo和toString

您是否看过Java中Object类的javadoc&#xff1f; 大概。 您倾向于时不时地到达那里&#xff0c;然后沿着继承树进行挖掘。 您可能已经注意到的一件事是&#xff0c;每个类都必须继承许多方法。 实现自己而不是坚持使用原始方法的最喜欢的方法可能是.toString&#xff08;&#…

密码保护

1.更新User对象&#xff0c;设置对内的_password class User(db.Model): __tablename__ user _password db.Column(db.String(200), nullableFalse) #内部使用 2.编写对外的password from werkzeug.security import generate_password_hash, check_password_hash property d…