| 此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Boot 3.5.5! | 
元数据格式
配置元数据文件位于 jar 中,位于META-INF/spring-configuration-metadata.json.
它们使用 JSON 格式,其中项分类在“组”或“属性”下,附加值提示分类在“提示”下,忽略项分类在“忽略”下,如以下示例所示:
{"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.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.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.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"
		}
		...
	]
}}每个“属性”都是用户使用给定值指定的配置项。
例如server.port和server.address可能会在application.properties/application.yaml如下:
- 
Properties 
- 
YAML 
server.port=9090
server.address=127.0.0.1server:
  port: 9090
  address: 127.0.0.1“组”是更高级别的项,它们本身不指定值,而是为属性提供上下文分组。
例如,server.port和server.address属性是server群。
| 不要求每个“属性”都有一个“组”。 某些属性可能本身存在。 | 
“提示”是用于帮助用户配置给定属性的附加信息。
例如,当开发人员配置spring.jpa.hibernate.ddl-auto属性,工具可以使用提示为none,validate,update,create和create-drop值。
最后,“忽略”是指故意忽略的项目。 此部分的内容通常来自附加元数据。
组属性
包含在groupsarray 可以包含下表所示的属性:
| 名称 | 类型 | 目的 | 
|---|---|---|
| 
 | 字符串 | 组的全名。 此属性是强制性的。 | 
| 
 | 字符串 | 组数据类型的类名。
 例如,如果该组基于一个类,则 | 
| 
 | 字符串 | 可向用户显示的组的简短描述。
 如果没有可用的描述,则可以省略。
 建议描述为简短段落,第一行提供简洁的摘要。
 描述中的最后一行应以句点 ( | 
| 
 | 字符串 | 提供此组的源的类名。
 例如,如果该组基于 | 
| 
 | 字符串 | 提供此组的方法的全名(包括括号和参数类型)(例如,一个 | 
属性属性
包含在propertiesarray 可以包含下表中描述的属性:
| 名称 | 类型 | 目的 | 
|---|---|---|
| 
 | 字符串 | 属性的全名。
 名称采用小写句点分隔的形式(例如, | 
| 
 | 字符串 | 属性数据类型的完整签名(例如 | 
| 
 | 字符串 | 可向用户显示的属性的简短说明。
 如果没有可用的描述,则可以省略。
 建议描述为简短段落,第一行提供简洁的摘要。
 描述中的最后一行应以句点 ( | 
| 
 | 字符串 | 提供此属性的源的类名。
 例如,如果该属性来自用 | 
| 
 | 对象 | 默认值,如果未指定属性,则使用该值。 如果属性的类型是数组,则它可以是值数组。 如果默认值未知,则可以省略它。 | 
| 
 | 折旧 | 指定是否弃用该属性。
 如果该字段未弃用或该信息未知,则可以省略该字段。
 下表提供了有关 | 
包含在deprecation每个属性properties元素可以包含以下属性:
| 名称 | 类型 | 目的 | 
|---|---|---|
| 
 | 字符串 | 弃用级别,可以是 | 
| 
 | 字符串 | 弃用该属性的原因的简短说明。
 如果没有原因,可以省略。
 建议描述为简短段落,第一行提供简洁的摘要。
 描述中的最后一行应以句点 ( | 
| 
 | 字符串 | 替换此已弃用属性的属性的全名。如果此属性没有替换,则可以省略它。 | 
| 
 | 字符串 | 属性被弃用的版本。可以省略。 | 
| 在 Spring Boot 1.3 之前,单个 deprecatedboolean 属性可以代替deprecation元素。
这仍然以已弃用的方式受支持,不应再使用。
如果没有原因和替换可用,则空deprecation对象。 | 
弃用也可以在代码中声明式指定,方法是将@DeprecatedConfigurationProperty注释给 getter 公开已弃用的属性。
例如,假设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")
	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") get
		@Deprecated("") set
}| 没有办法设置一个 level.warning始终被假定,因为代码仍在处理该属性。 | 
前面的代码确保已弃用的属性仍然有效(委托给name幕后房产)。
一旦getTarget和setTarget可以从公共 API 中删除方法,元数据中的自动弃用提示也会消失。
如果您想保留提示,请使用error弃用级别可确保用户仍了解该属性。
当replacement被提供。
提示属性
包含在hintsarray 可以包含下表所示的属性:
| 名称 | 类型 | 目的 | 
|---|---|---|
| 
 | 字符串 | 此提示所引用的属性的全名。
 名称采用小写句点分隔的形式(例如 | 
| 
 | 价值提示[] | 由 | 
| 
 | 价值提供者[] | 由 | 
包含在values每个属性hint元素可以包含下表中描述的属性:
| 名称 | 类型 | 目的 | 
|---|---|---|
| 
 | 对象 | 提示引用的元素的有效值。 如果属性的类型是数组,它也可以是值数组。 此属性是强制性的。 | 
| 
 | 字符串 | 可向用户显示的值的简短描述。
 如果没有可用的描述,则可以省略。
 建议描述为简短段落,第一行提供简洁的摘要。
 描述中的最后一行应以句点 ( | 
包含在providers每个属性hint元素可以包含下表中描述的属性:
| 名称 | 类型 | 目的 | 
|---|---|---|
| 
 | 字符串 | 用于为提示所引用的元素提供其他内容帮助的提供程序的名称。 | 
| 
 | JSON 对象 | 提供程序支持的任何其他参数(有关更多详细信息,请查看提供程序的文档)。 | 
忽略的属性
这ignored对象可以包含下表所示的属性:
| 名称 | 类型 | 目的 | 
|---|---|---|
| 
 | 项目忽略[] | 由 ItemIgnore 对象定义的忽略属性列表 (如下表所述) 。每个条目都定义了被忽略属性的名称。 | 
包含在properties每个属性ignored元素可以包含下表中描述的属性:
| 名称 | 类型 | 目的 | 
|---|---|---|
| 
 | 字符串 | 要忽略的属性的全名。
名称采用小写句点分隔的形式(例如 | 
重复的元数据项
具有相同“属性”和“组”名称的对象可以在元数据文件中多次出现。 例如,您可以将两个单独的类绑定到同一个前缀,每个类都有可能重叠的属性名称。 虽然元数据中多次出现的相同名称不应该很常见,但元数据的使用者应注意确保他们支持它。