元数据格式
配置元数据文件位于jar包内的 META-INF/spring-configuration-metadata.json
路径下。
它们采用JSON格式,条目被归类为“groups
”或“properties
”,额外的值提示归类为“hints
”,被忽略的条目归类为“ignored
”,如下例所示:
{"groups": [
{
"name": "server",
"type": "org.springframework.boot.autoconfigure.web.ServerProperties",
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
},
{
"name": "spring.jpa.hibernate",
"type": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate",
"sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties",
"sourceMethod": "getHibernate()"
}
...
],"properties": [
{
"name": "server.port",
"type": "java.lang.Integer",
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
},
{
"name": "server.address",
"type": "java.net.InetAddress",
"sourceType": "org.springframework.boot.autoconfigure.web.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.autoconfigure.orm.jpa.JpaProperties$Hibernate"
}
...
],"hints": [
{
"name": "spring.jpa.hibernate.ddl-auto",
"values": [
{
"value": "none",
"description": "禁用DDL处理。"
},
{
"value": "validate",
"description": "验证schema,不对数据库做任何更改。"
},
{
"value": "update",
"description": "如有必要,更新schema。"
},
{
"value": "create",
"description": "创建schema并销毁原有数据。"
},
{
"value": "create-drop",
"description": "创建schema并在会话结束时销毁。"
}
]
}
...
],"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
分组。
并非每个“property ”都必须有“group ”。
有些属性可以独立存在。
|
“hints
”为配置某个属性提供额外信息。
例如,当开发者配置 spring.jpa.hibernate.ddl-auto
属性时,工具可以利用hints为 none
、validate
、update
、create
和 create-drop
等值提供自动补全。
最后,“ignored
”用于那些被有意忽略的条目。
本节内容通常来自 附加元数据。
分组属性(Group Attributes)
groups
数组中的JSON对象可包含下表所示属性:
Name | Type | Purpose |
---|---|---|
|
String |
分组的全名。 此属性为必填项。 |
|
String |
分组数据类型的类名。
例如,如果分组基于带有 |
|
String |
可展示给用户的分组简要描述。
若无描述可省略。
建议描述为简短段落,首行为简明摘要,最后一行为句号( |
|
String |
贡献此分组的源的类名。
例如,若分组基于带有 |
|
String |
贡献此分组的方法全名(包括括号和参数类型),如带有 |
属性属性(Property Attributes)
properties
数组中的JSON对象可包含下表所述属性:
Name | Type | Purpose |
---|---|---|
|
String |
属性的全名。
名称采用小写点分隔形式(如 |
|
String |
属性数据类型的完整签名(如 |
|
String |
可展示给用户的属性简要描述。
若无描述可省略。
建议描述为简短段落,首行为简明摘要,最后一行为句号( |
|
String |
贡献此属性的源类名。
例如,若属性来自带有 |
|
Object |
默认值,若未指定该属性则使用。 若属性类型为数组,则可为值数组。 若默认值未知可省略。 |
|
Deprecation |
指定属性是否已弃用。
若未弃用或未知可省略。
下表详细说明 |
properties
元素的 deprecation
属性中的JSON对象可包含如下属性:
Name | Type | Purpose |
---|---|---|
|
String |
弃用级别,可为 |
|
String |
属性弃用原因的简要描述。
若无原因可省略。
建议描述为简短段落,首行为简明摘要,最后一行为句号( |
|
String |
替代此弃用属性的完整属性名。 若无替代项可省略。 |
|
String |
属性弃用的版本号。 可省略。 |
在Spring Boot 1.3之前,可用单个 deprecated 布尔属性替代 deprecation 元素。
该方式已废弃但仍受支持,不应再使用。
若无原因和替代项,应设置空的 deprecation 对象。
|
弃用也可通过在getter方法上添加 @DeprecatedConfigurationProperty
注解在代码中声明。
例如,假设 my.app.target
属性令人困惑,被重命名为 my.app.name
。
以下示例展示如何处理:
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")
public String getTarget() {
return this.name;
}
@Deprecated
public void setTarget(String target) {
this.name = target;
}
}
无法设置 level ,始终视为 warning ,因为代码仍在处理该属性。
|
上述代码确保弃用属性仍然有效(底层委托给 name
属性)。
一旦 getTarget
和 setTarget
方法可从公共API移除,元数据中的自动弃用提示也会消失。
如需保留提示,可手动添加 error
级别的元数据,确保用户仍能获知该属性。
当存在 replacement
时尤为有用。
提示属性(Hint Attributes)
hints
数组中的JSON对象可包含下表所示属性:
Name | Type | Purpose |
---|---|---|
|
String |
此提示所指向属性的全名。
名称采用小写点分隔形式(如 |
|
ValueHint[] |
有效值列表,由 |
|
ValueProvider[] |
提供者列表,由 |
hint
元素的 values
属性中的JSON对象可包含如下属性:
Name | Type | Purpose |
---|---|---|
|
Object |
此提示所指元素的有效值。 若属性类型为数组,也可为值数组。 此属性为必填项。 |
|
String |
可展示给用户的值简要描述。
若无描述可省略。
建议描述为简短段落,首行为简明摘要,最后一行为句号( |
hint
元素的 providers
属性中的JSON对象可包含如下属性:
Name | Type | Purpose |
---|---|---|
|
String |
用于为该元素提供内容辅助的提供者名称。 |
|
JSON object |
提供者支持的其他参数(详见提供者文档)。 |