在简要介绍了配置元数据并涵盖了我之前的文章《 在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."
    }
}
...

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

spring配置数据源 group _0_python

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

spring配置数据源 group _0_大数据_02

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

spring配置数据源 group _0_大数据_03

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

spring配置数据源 group _0_java_04

价值提供者

值提供程序仅可用于手动提供的提示(使用文件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"
                }
            }
        ]
    }
...

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

spring配置数据源 group _0_java_05

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

spring配置数据源 group _0_大数据_06

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

spring配置数据源 group _0_编程语言_07

处理为

请像处理另一个很酷的提供程序一样进行处理。 它允许您将属性的类型替换为更高级的类型。 这只是一种幻想的表达方式,您希望您的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"
                }
            }
        ]
    }
...

首先要介绍的是您要使用的资源类型的选择(是的,它支持资源字符串前缀:))。

spring配置数据源 group _0_大数据_08

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

spring配置数据源 group _0_java_09

其他

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

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

结论

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

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