Spring Boot 1.3.0中发布了许多更新,但是其中一个对我很突出,因为我以前并不了解此更新,它的状态使其成为一项真正有用的功能(不幸的是,撰写本文时仅在Spring Boot中可用)这个)。 我正在谈论配置元数据以及与框架/应用程序这一领域相关的处理。 正如我将进一步演示的那样,有几种方法可以使用它,并且该框架还允许您利用自动化处理的好处。 如果您觉得自己需要解决这些问题,请不要担心–如果您想使用某些功能来精确调整设置,也可以使用手动输入的方法。 让我们谈谈配置。

Spring Boot中的配置元数据

面对现实吧-我们都去过那里。 您正在处理的应用程序必须是可配置的,但是,在涉及实际文档时,情况会有些奇怪。 团队通常有几种方法来处理这项艰巨的任务。 无论是在项目Wiki中对其进行描述和管理,还是在属性文件中部分注释,以Javadoc注释形式记录下来,或者根本不存在,我们都可以认为这与所需的事务状态相去甚远。 这涉及到一些挑战,例如使文档可供所有涉众使用(例如devops团队),版本控制和保持最新(尤其是不向后兼容的更新),或者只是弄清楚哪些选项可用或已弃用,以及它们对应用程序意味着什么。

项目设置

第一步是设置一切。 如前所述,您将需要使用Spring Boot 1.3.0或更高版本以及特殊依赖项,以确保重新编译包含元数据的文件,该文件稍后将由其他工具(如IDE)处理。 该工件称为spring-boot-configruation-processor ,应将其标记为optional

pom.xml中的Spring Boot依赖关系

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.1.RELEASE</version><relativePath/>
</parent><dependencies>...<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency>...
</dependencies>

此设置的第二步是启用配置属性并实际创建一个包含它们的类。 这是一个相当简单的任务(尤其是如果您有使用Spring Boot的经验)。 我们将此类称为MyProperties

启用配置属性的配置类

@Configuration
@EnableConfigurationProperties({MyProperties.class})
public class ApplicationConfiguration {@Autowiredprivate MyProperties myProperties;public MyProperties getMyProperties() {return myProperties;}public void setMyProperties(MyProperties myProperties) {this.myProperties = myProperties;}
}

开箱即用的配置元数据

MyProperties类反映以单词my开头的属性。 现在我们已经完成所有设置并准备就绪,让我们看一下该机制在两种最基本情况下如何工作。 考虑这两个配置属性–单个String属性( property )和使用enum值的属性( copyOption )。 这两个属性都是使用标准Javadoc进行描述的,如果使用StandardCopyOption ,则每个enum值都有其自己的Javadoc注释。 Spring Boots对配置元数据的支持尝试利用代码中的最大值,因为开发人员希望它能正确注释其配置属性(在enum的情况下非常有用且方便)。

样本配置属性类

@ConfigurationProperties(prefix = "my")
public class MyProperties {/*** String property used to configure my app.*/private String property;/*** Configuration for file operations.*/private StandardCopyOption copyOption;public String getProperty() {return property;}public void setProperty(String property) {this.property = property;}public StandardCopyOption getCopyOption() {return copyOption;}public void setCopyOption(StandardCopyOption copyOption) {this.copyOption = copyOption;}}

现在该看魔术发生了。 前面提到的Spring依赖项可确保在项目构建期间生成元数据。 为了从整个设置中获得一些收益,您需要知道您的IDE如何支持此Spring Boot功能。 例如,据我所知,保存操作/事件上的Eclipse IDE触发了一个构建,该构建负责保持元数据为最新。 对于IntelliJ IDEA,由于没有保存/保存事件,您需要手动触发构建。 构建结束后,您可以浏览target文件夹(如果使用maven)并查找新添加的文件target\classes\META-INF\spring-configuration-metadata.json 。 给定上面的代码,您应该看到类似于以下内容:

target \ classes \ META-INF \ spring-configuration-metadata.json的内容

{"groups": [{"name": "my","type": "com.jakubstas.s3downloader.MyProperties","sourceType": "com.jakubstas.s3downloader.MyProperties"}],"properties": [{"name": "my.copy-option","type": "java.nio.file.StandardCopyOption","description": "Configuration for file operations.","sourceType": "com.jakubstas.s3downloader.MyProperties"},{"name": "my.property","type": "java.lang.String","description": "String property used to configure my app.","sourceType": "com.jakubstas.s3downloader.MyProperties"}],"hints": []
}

现在,该文件可供读取和处理的工具使用,也可供团队成员检查以查看如何配置应用程序。 就是说,一旦我在IntelliJ IDEA编辑器中打开application.properties并开始为每个属性输入前缀,就会被熟悉的自动代码完成窗口所欢迎,该窗口具有我的每个属性用于什么的概念(基于在Javadoc注释上):

对于enum属性,我还可以看到每个enum的值及其各自的Javadoc注释:

默认值选择

配置文档的最基本用例之一是为您的配置属性选择一个合理的默认值,以便尽可能容易地配置您的应用程序。 让我们看一下如何在此设置中实现这一目标。 为了允许任何手动输入spring-configuration-metadata.json file ,开发人员必须首先创建一个新的单独文件,然后由构建过程使用。 这是另一个名为Additional additional-spring-configuration-metadata.json json文件,应该在META-INF文件夹中创建,并且必须遵循附录B.配置元数据中描述的语法。

这样,一旦确定了默认值和可用选项(我想提供两个预定义的选项,但仍允许在String属性中使用任何其他String值),就可以使用以下内容创建该文件:

Additional-spring-configuration-metadata.json的内容

{"properties": [{"name": "my.copy-option","type": "java.lang.String","sourceType": "java.nio.file.StandardCopyOption","defaultValue": "replace_existing"},{"name": "my.property","defaultValue": "something"}],"hints": [{"name": "my.property","values": [{"value": "nothing","description": "Does nothing."},{"value": "something","description": "Does something."}]}]
}

这几乎可以达到预期的效果,并且已经可以在某些Spring Boot依赖项中看到。 对于String属性,两个选项均带有各自的描述。 默认选项已锁定。

enum属性的行为略有不同,因为IDE不会固定该选项,而是将其放在列表的顶部。

最后,让我们看一看尚未选择任何特定属性的内容。 在这种情况下,这两个属性均显示其对Javadoc的描述及其默认值。

结论

这是对如何使配置更加出色的简短介绍。 这篇文章只是放弃了可能实现的目标,并且仍然设法显示出此功能的巨大潜力。 我鼓励您尝试一下此功能,亲自看看这种设置是否对您和您的团队都有效。 在下一篇文章中,我将详细介绍此配置支持。 敬请关注!

翻译自: https://www.javacodegeeks.com/2016/01/pimp-config-configuration-meta-data-spring-boot.html

在Spring Boot中使用配置元数据来配置您的配置相关推荐

  1. Spring Boot中的缓存支持(一)注解配置与EhCache使用

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  2. (转)Spring Boot(十一):Spring Boot 中 MongoDB 的使用

    http://www.ityouknow.com/springboot/2017/05/08/spring-boot-mongodb.html MongoDB 是最早热门非关系数据库的之一,使用也比较 ...

  3. SpringBoot - Spring Boot 中的配置体系Profile全面解读

    文章目录 Pre Spring Boot 中的配置体系 配置文件与 Profile 主 application.properties 中指定激活的Profile Profile 配置信息只保存在一个文 ...

  4. 徒手解密 Spring Boot 中的 Starter自动化配置黑魔法

    我们使用 Spring Boot,基本上都是沉醉在它 Stater 的方便之中.Starter 为我们带来了众多的自动化配置,有了这些自动化配置,我们可以不费吹灰之力就能搭建一个生产级开发环境,有的小 ...

  5. boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口

    Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具.使得使用者无需开发任何代码就配置一个满足需求的接口. 整个接口配置.测试.冒烟.发布.一站式都通过 ...

  6. Spring Boot中的一些常用配置介绍!

    这篇教程将为你介绍Spring Boot 中的一些常用配置,比如:自定义 Banner.配置日志.关闭特定的自动配置等. 自定义Banner 在 Spring Boot 启动的时候会有一个默认的启动图 ...

  7. 在Spring Boot中配置web app

    文章目录 添加依赖 配置端口 配置Context Path 配置错误页面 在程序中停止Spring Boot 配置日志级别 注册Servlet 切换嵌套服务器 在Spring Boot中配置web a ...

  8. springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置

    本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...

  9. Spring Boot中的高级配置文件管理

    我们都知道Spring Boot中的配置文件管理及其为不同环境配置应用程序时提供的灵活性. 此功能的另一个强大方面是,在任何给定时间,我们都可以拥有多个活动配置文件. 这样做的好处是我们可以将部署环境 ...

最新文章

  1. 《研磨设计模式》chap22 装饰模式Decorator(2)应用到场景
  2. 分块内存映射处理大文件-例子
  3. Vue 3.1.0 的 beta 版发布
  4. SQL SERVER 的SQL语句优化方式小结
  5. listview刷新_Flutter NestedScrollView 滑动折叠头部下拉刷新效果
  6. Java的String理解
  7. nodejs路由控制图文混排
  8. RabbitMQ教程_4 Java 使用rabbitmq
  9. 单链表java实现及相关操作(版本1)
  10. 对于文章的字母、单词、短语,(无用词表)的检索Java代码实现
  11. iOS项目转移到自动引用计数
  12. EasyUI 中自定义组件 icon 图标
  13. Java-实现图书管理系统
  14. 详细名单:Google的581个域名
  15. 2022-2027年中国苹果树种植行业市场全景评估及发展战略规划报告
  16. 报告格式调整(自动生成目录、页码设置等)
  17. 利用Oh-My-Zsh打造你的超级终端
  18. Asan快速定位内存越界、内存泄漏
  19. TabLayout的使用和自定义红点消息提示
  20. 基于CentOs的docker的安装和简单使用

热门文章

  1. Java Jar包的压缩、解压使用指南
  2. Util包中Arrays
  3. 关于return的用法
  4. Node.JS第二讲笔记
  5. 要么干,要么滚,千万别混
  6. 解决: -bash: docker-compose: command not found、linux 安装 docker-compose
  7. http响应状态码列表
  8. jvm(4)-虚拟机性能监控与故障处理工具
  9. XML—— XSL 转换
  10. GET与POST传递数据的最大长度能够达到多少