|
此版本仍在开发中,尚未视为稳定版。如需最新稳定版本,请使用 Spring Boot 4.0.4! |
元数据格式
配置元数据文件位于 JAR 包内的 META-INF/spring-configuration-metadata.json 路径下。
它们采用 JSON 格式,其中的条目被归类为“groups”(组)或“properties”(属性),附加的值提示归类在“hints”(提示)下,而被忽略的条目则归类在“ignored”(忽略)下,如下例所示:
{"groups": [
{
"name": "server",
"type": "org.springframework.boot.web.server.autoconfigure.ServerProperties",
"sourceType": "org.springframework.boot.web.server.autoconfigure.ServerProperties"
},
{
"name": "spring.jpa.hibernate",
"type": "org.springframework.boot.jpa.autoconfigure.JpaProperties$Hibernate",
"sourceType": "org.springframework.boot.jpa.autoconfigure.JpaProperties",
"sourceMethod": "getHibernate()"
}
...
],"properties": [
{
"name": "server.port",
"type": "java.lang.Integer",
"sourceType": "org.springframework.boot.web.server.autoconfigure.ServerProperties"
},
{
"name": "server.address",
"type": "java.net.InetAddress",
"sourceType": "org.springframework.boot.web.server.autoconfigure.ServerProperties"
},
{
"name": "spring.jpa.hibernate.ddl-auto",
"type": "java.lang.String",
"description": "DDL mode. This is actually a shortcut for the \"hibernate.hbm2ddl.auto\" property.",
"sourceType": "org.springframework.boot.jpa.autoconfigure.JpaProperties$Hibernate"
}
...
],"hints": [
{
"name": "spring.jpa.hibernate.ddl-auto",
"values": [
{
"value": "none",
"description": "Disable DDL handling."
},
{
"value": "validate",
"description": "Validate the schema, make no changes to the database."
},
{
"value": "update",
"description": "Update the schema if necessary."
},
{
"value": "create",
"description": "Create the schema and destroy previous data."
},
{
"value": "create-drop",
"description": "Create and then destroy the schema at the end of the session."
}
]
}
...
],"ignored": {
"properties": [
{
"name": "server.ignored"
}
...
]
}}
每个“属性”(property)都是用户指定的一个配置项,并带有相应的值。
例如,server.port 和 server.address 可以在您的 application.properties/application.yaml 文件中进行如下配置:
-
Properties
-
YAML
server.port=9090
server.address=127.0.0.1
server:
port: 9090
address: 127.0.0.1
“组”(groups)是更高层级的项,它们本身并不指定具体的值,而是为属性提供上下文分组。
例如,server.port 和 server.address 属性属于 server 组。
| 并非每个“属性”都必须属于一个“组”。 某些属性可以独立存在。 |
“提示”(hints)是用于帮助用户配置特定属性的附加信息。
例如,当开发者配置 spring.jpa.hibernate.ddl-auto 属性时,工具可以利用这些提示为 none、validate、update、create 和 create-drop 等值提供自动补全帮助。
最后,“ignored”用于表示那些被有意忽略的项。 本节的内容通常来自附加元数据。
组属性
groups 数组中包含的 JSON 对象可以包含下表所示的属性:
| 姓名 | 类型 | 目的 |
|---|---|---|
|
字符串 |
组的全名。 此属性为必填项。 |
|
字符串 |
组的數據類型的類名。
例如,如果該組基於一個註解了 |
|
字符串 |
可向用户显示的组的简短描述。
如果没有可用的描述,可以省略。
建议描述使用简短段落,首行提供简洁摘要。
描述的最后一行应以句号( |
|
字符串 |
贡献此组的源的类名。
例如,如果该组基于一个使用 |
|
字符串 |
贡献此组的方法的全名(包括括号和参数类型)(例如,带有 |
属性特性
properties 数组中包含的 JSON 对象可以包含下表中描述的属性:
| 姓名 | 类型 | 目的 |
|---|---|---|
|
字符串 |
属性的完整名称。
名称采用小写、以点号分隔的形式(例如, |
|
字符串 |
属性的数据类型的完整签名(例如, |
|
字符串 |
可向用户显示的属性简短描述。
如果没有可用的描述,则可以省略。
建议描述采用简短段落的形式,第一行提供简洁的摘要。
描述的最后一行应以句号( |
|
字符串 |
贡献此属性的源的类名。
例如,如果该属性来自一个使用 |
|
对象 |
默认值,在未指定该属性时使用。 如果属性的类型是数组,则可以是一个或多个值组成的数组。 如果默认值未知,可以省略。 |
|
弃用 |
指定该属性是否已弃用。
如果该字段未被弃用,或者该信息未知,则可以省略。
下表提供了有关 |
每个 deprecation 元素的 properties 属性中包含的 JSON 对象可以包含以下属性:
| 姓名 | 类型 | 目的 |
|---|---|---|
|
字符串 |
弃用级别,可以是 |
|
字符串 |
属性被弃用原因的简要说明。
如果无可用原因,可省略此项。
建议描述采用简短段落形式,首行提供简洁摘要。
描述的最后一行应以句号( |
|
字符串 |
被此已弃用属性替换的属性的完整名称。 如果此属性没有替代项,则可以省略。 |
|
字符串 |
该属性被弃用的版本。 可以省略。 |
在 Spring Boot 1.3 之前,可以使用单个 deprecated 布尔属性来代替 deprecation 元素。
这种方式目前仍以废弃的形式被支持,但不应再使用。
如果没有可用的原因和替代方案,则应设置一个空的 deprecation 对象。 |
弃用也可以通过在暴露已弃用属性的 getter 方法上添加 @DeprecatedConfigurationProperty 注解以声明方式在代码中指定。
例如,假设 my.app.target 属性令人困惑,因此被重命名为 my.app.name。
以下示例展示了如何处理这种情况:
-
Java
-
Kotlin
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
@ConfigurationProperties("my.app")
public class MyProperties {
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Deprecated
@DeprecatedConfigurationProperty(replacement = "my.app.name", since = "1.2.0")
public String getTarget() {
return this.name;
}
@Deprecated
public void setTarget(String target) {
this.name = target;
}
}
import org.springframework.boot.context.properties.ConfigurationProperties
import org.springframework.boot.context.properties.DeprecatedConfigurationProperty
@ConfigurationProperties("my.app")
class MyProperties(val name: String?) {
var target: String? = null
@Deprecated("") @DeprecatedConfigurationProperty(replacement = "my.app.name", since = "1.2.0") get
@Deprecated("") set
}
无法设置 level。
始终假定为 warning,因为代码仍在处理该属性。 |
上述代码确保已弃用的属性仍然可以正常工作(在底层将调用委托给 name 属性)。
一旦可以从您的公共 API 中移除 getTarget 和 setTarget 方法,元数据中的自动弃用提示也会随之消失。
如果您希望保留提示信息,可以通过添加带有 error 弃用级别的手动元数据,确保用户仍然能获知该属性已被弃用。
当提供了 replacement(替代方案)时,这种做法尤其有用。
提示属性
hints 数组中包含的 JSON 对象可以包含下表所示的属性:
| 姓名 | 类型 | 目的 |
|---|---|---|
|
字符串 |
此提示所引用的属性的完整名称。
名称采用小写、以句点分隔的形式(例如 |
|
ValueHint[] |
由 |
|
ValueProvider[] |
由 |
每个 values 元素的 hint 属性中包含的 JSON 对象可以包含下表所述的属性:
| 姓名 | 类型 | 目的 |
|---|---|---|
|
对象 |
提示所引用元素的有效值。 如果属性的类型是数组,它也可以是值的数组。 此属性为必填项。 |
|
字符串 |
可向用户显示的值的简短描述。
如果没有可用的描述,可以省略。
建议描述采用简短段落的形式,第一行提供简洁的摘要。
描述的最后一行应以句号( |
每个 providers 元素的 hint 属性中包含的 JSON 对象可以包含下表所述的属性:
| 姓名 | 类型 | 目的 |
|---|---|---|
|
字符串 |
用于为提示所引用的元素提供额外内容辅助的提供程序名称。 |
|
JSON 对象 |
提供方所支持的任何其他参数(有关更多详细信息,请查阅该提供方的文档)。 |
忽略的属性
ignored 对象可以包含下表所示的属性:
| 姓名 | 类型 | 目的 |
|---|---|---|
|
ItemIgnore[] |
由 ItemIgnore 对象(在下表中描述)定义的忽略属性列表。每个条目定义了被忽略属性的名称。 |
每个 properties 元素的 ignored 属性中包含的 JSON 对象可以包含下表所述的属性:
| 姓名 | 类型 | 目的 |
|---|---|---|
|
字符串 |
要忽略的属性的完整名称。
名称采用小写、以点号分隔的形式(例如 |
重复的元数据项
具有相同“property”和“group”名称的对象可以在一个元数据文件中多次出现。 例如,你可以将两个独立的类绑定到相同的前缀下,每个类可能包含重叠的属性名称。 尽管在元数据中多次出现相同的名称并不常见,但元数据的使用者应注意确保支持这种情况。