# 5.2.2 声明配置属性元数据

根据 IDE 的情况，你可能已经注意到 application.yml（或是 appication.properties）中的 taco.orders.pageSize 属性有一个警告，说类似未知属性 'taco' 之类的东西。出现此警告是因为缺少关于刚刚创建的配置属性的元数据。图 5.2 显示了我将鼠标悬停在 Spring Tool Suite 中 taco 属性时的效果。

![图 5.2 缺少配置属性元数据出现的警告](https://867170852-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LrmLE3NwQoVJk02Q_BX%2F-LsZcjYMLbnPglDaJI0e%2F-LsZdKbRL_XIZXJgxNwu%2F%E5%9B%BE%205.2%20%E7%BC%BA%E5%B0%91%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%85%83%E6%95%B0%E6%8D%AE%E5%87%BA%E7%8E%B0%E7%9A%84%E8%AD%A6%E5%91%8A.jpg?alt=media\&token=21edc2ce-a739-4c30-9555-fe5d1cd0c2a4)

配置属性元数据是完全可选的，并不会阻止配置属性的工作。但是元数据对于提供有关配置属性的最小文档非常有用，特别是在 IDE 中。

例如，当我将鼠标悬停在 security.user.password 属性上时，如图5.3所示，虽然悬停帮助你获得的是最小的，但它足以帮助你了解属性的用途以及如何使用它。

![图 5.3 在 Spring Tool Suite 中悬停显示配置属性文档](https://867170852-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LrmLE3NwQoVJk02Q_BX%2F-LsZcjYMLbnPglDaJI0e%2F-LsZdP8-rb6FCt_n0avb%2F%E5%9B%BE%205.3%20%E5%9C%A8%20Spring%20Tool%20Suite%20%E4%B8%AD%E6%82%AC%E5%81%9C%E6%98%BE%E7%A4%BA%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E6%96%87%E6%A1%A3.jpg?alt=media\&token=00f45630-54ad-4675-97ef-a386ba831166)

为了帮助那些可能使用你定义的配置属性（甚至可能是你自己定义的）的人，通常最好是围绕这些属性创建一些元数据，至少它消除了 IDE 中那些恼人的黄色警告。

要为自定义配置属性创建元数据，需要在 META-INF（例如，在项目下的 src/main/resources/META-INF 中）中创建一个名为 addition-spring-configuration-metadata.json 的文件。

快速修复缺失的元数据。

如果正在使用 Spring Tool Suite，则有一个用于创建丢失的属性元数据的快速修复选项。将光标放在缺少元数据警告的行上，然后按下 Mac 上的 CMD-1 或 Windows 和 Linux 上的 Ctrl-1 弹出的快速修复（参见图 5.4）。

![图 5.4 在 Spring Tool Suite 中使用快速弹出方式创建配置属性元数据](https://867170852-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LrmLE3NwQoVJk02Q_BX%2F-LsZcjYMLbnPglDaJI0e%2F-LsZdVr9E9-80kOiQnqZ%2F%E5%9B%BE%205.4%20%E5%9C%A8%20Spring%20Tool%20Suite%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%BF%AB%E9%80%9F%E5%BC%B9%E5%87%BA%E6%96%B9%E5%BC%8F%E5%88%9B%E5%BB%BA%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%85%83%E6%95%B0%E6%8D%AE.jpg?alt=media\&token=ec56805f-8f75-4924-aacb-468c80d4507c)

然后选择 `Create Metadata for…` 选项来为属性添加一些元数据（在 additional-spring-configuration-metadata 中)。如果该文件不存在，则创建该文件。

对于 taco.orders.pageSize 属性，可以用以下 JSON 设置元数据：

```
{
    "properties": [
        {
            "name": "taco.orders.page-size",
            "type": "java.lang.String",
            "description":"Sets the maximum number of orders to display in a list."
        }
    ]
}
```

注意，元数据中引用的属性名是 taco.orders.pagesize。Spring Boot 灵活的属性命名允许属性名的变化，比如 taco.orders.page-size 相当于 taco.orders.pageSize。

有了这些元数据，警告就应该消失了。更重要的是，如果你悬停在 taco.orders.pageSize 属性，你将看到如图 5.5 所示的描述。

![图 5.5 悬停显示自定义配置属性帮助](https://867170852-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LrmLE3NwQoVJk02Q_BX%2F-LsZcjYMLbnPglDaJI0e%2F-LsZdg6iY-cefGQE_L7A%2F%E5%9B%BE%205.5%20%E6%82%AC%E5%81%9C%E6%98%BE%E7%A4%BA%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%B8%AE%E5%8A%A9.jpg?alt=media\&token=be07eb80-3525-4f29-99da-70e8ab889cbd)

另外，如图 5.6 所示，可以从 IDE 获得自动完成帮助，就像 Springprovided 的配置属性一样。

![图 5.6 配置属性元数据让属性值自动填充](https://867170852-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LrmLE3NwQoVJk02Q_BX%2F-LsZcjYMLbnPglDaJI0e%2F-LsZdkjiPqqxVdb6YAfr%2F%E5%9B%BE%205.6%20%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%85%83%E6%95%B0%E6%8D%AE%E8%AE%A9%E5%B1%9E%E6%80%A7%E5%80%BC%E8%87%AA%E5%8A%A8%E5%A1%AB%E5%85%85.jpg?alt=media\&token=48c26967-6492-47ca-820b-c2e3b592d818)

配置属性对于调整自动配置的组件和注入到应用程序 bean 中的细节非常有用。但是，如果需要为不同的部署环境配置不同的属性呢？让我们看看如何使用 Spring 配置文件来设置特定于环境的配置。
