此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Boot 3.3.1

配置元数据文件位于 jar 下的 jar 中。 它们使用 JSON 格式,其中项目分类在“组”或“属性”下,其他值提示分类在“提示”下,如以下示例所示:META-INF/spring-configuration-metadata.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.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": "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."
			}
		]
	}
]}

每个“属性”都是用户使用给定值指定的配置项。 例如,可以在 / 中指定 and,如下所示:server.portserver.addressapplication.propertiesapplication.yaml

  • Properties

  • YAML

server.port=9090
server.address=127.0.0.1
server:
  port: 9090
  address: 127.0.0.1

“组”是更高级别的项目,它们本身不指定值,而是为属性提供上下文分组。 例如,和 属性是组的一部分。server.portserver.addressserver

并不要求每个“属性”都有一个“组”。 某些属性可能以自身权利存在。

最后,“提示”是用于帮助用户配置给定属性的附加信息。 例如,当开发人员配置属性时,工具可以使用提示为 、 、 、 和 值提供一些自动完成帮助。spring.jpa.hibernate.ddl-autononevalidateupdatecreatecreate-drop

并不要求每个“属性”都有一个“组”。 某些属性可能以自身权利存在。

组属性

数组中包含的 JSON 对象可以包含下表中显示的属性:groups

名字 类型 目的

name

字符串

组的全名。 此属性是必需的。

type

字符串

组的数据类型的类名。 例如,如果该组基于用 批注的类,则该属性将包含该类的完全限定名称。 如果它基于一个方法,它将是该方法的返回类型。 如果类型未知,则可以省略该属性。@ConfigurationProperties@Bean

description

字符串

可以向用户显示的组的简短说明。 如果没有可用的描述,则可以省略它。 建议描述是简短的段落,第一行提供简明扼要的摘要。 描述中的最后一行应以句点 () 结尾。.

sourceType

字符串

贡献此组的源的类名。 例如,如果组基于用 批注的方法,则此属性将包含包含该方法的类的完全限定名称。 如果源类型未知,则可以省略该属性。@Bean@ConfigurationProperties@Configuration

sourceMethod

字符串

贡献此组的方法的全名(包括括号和参数类型)(例如,带批注的方法的名称)。 如果源方法未知,则可以省略它。@ConfigurationProperties@Bean

名字 类型 目的

name

字符串

组的全名。 此属性是必需的。

type

字符串

组的数据类型的类名。 例如,如果该组基于用 批注的类,则该属性将包含该类的完全限定名称。 如果它基于一个方法,它将是该方法的返回类型。 如果类型未知,则可以省略该属性。@ConfigurationProperties@Bean

description

字符串

可以向用户显示的组的简短说明。 如果没有可用的描述,则可以省略它。 建议描述是简短的段落,第一行提供简明扼要的摘要。 描述中的最后一行应以句点 () 结尾。.

sourceType

字符串

贡献此组的源的类名。 例如,如果组基于用 批注的方法,则此属性将包含包含该方法的类的完全限定名称。 如果源类型未知,则可以省略该属性。@Bean@ConfigurationProperties@Configuration

sourceMethod

字符串

贡献此组的方法的全名(包括括号和参数类型)(例如,带批注的方法的名称)。 如果源方法未知,则可以省略它。@ConfigurationProperties@Bean

属性属性

数组中包含的 JSON 对象可以包含下表中描述的属性:properties

名字 类型 目的

name

字符串

属性的全名。 名称采用小写的句点分隔形式(例如,)。 此属性是必需的。server.address

type

字符串

属性的数据类型的完整签名(例如,),但也包括完整的泛型类型(例如 )。 您可以使用此属性来指导用户输入他们可以输入的值类型。 为了保持一致性,使用其包装器对应项指定基元的类型(例如,成为 )。 请注意,此类可能是一个复杂类型,当值绑定时,它会从 转换而来。 如果类型未知,则可以省略。java.lang.Stringjava.util.Map<java.lang.String,com.example.MyEnum>booleanjava.lang.BooleanString

description

字符串

可以向用户显示的属性的简短说明。 如果没有可用的描述,则可以省略它。 建议描述是简短的段落,第一行提供简明扼要的摘要。 描述中的最后一行应以句点 () 结尾。.

sourceType

字符串

提供此属性的源的类名。 例如,如果该属性来自用 批注的类,则此属性将包含该类的完全限定名称。 如果源类型未知,则可以省略。@ConfigurationProperties

defaultValue

对象

默认值,如果未指定该属性,则使用该值。 如果属性的类型是数组,则它可以是值数组。 如果默认值未知,则可以省略该值。

deprecation

折旧

指定是否弃用该属性。 如果该字段未弃用或该信息未知,则可以省略该字段。 下表提供了有关该属性的更多详细信息。deprecation

每个元素的属性中包含的 JSON 对象可以包含以下属性:deprecationproperties

名字 类型 目的

level

字符串

弃用级别,可以是(默认值)或 . 当属性具有弃用级别时,它仍应绑定到环境中。 但是,当它具有弃用级别时,该属性将不再受管理且未绑定。warningerrorwarningerror

reason

字符串

对该属性被弃用的原因的简短说明。 如果没有原因,可以省略。 建议描述是简短的段落,第一行提供简明扼要的摘要。 描述中的最后一行应以句点 () 结尾。.

replacement

字符串

替换此已弃用属性的属性的全名。 如果没有替代此属性,则可以省略它。

since

字符串

属性被弃用的版本。 可以省略。

在 Spring Boot 1.3 之前,可以使用单个布尔属性来代替元素。 这仍以不推荐使用的方式受支持,不应再使用。 如果没有可用的原因和替换,则应设置一个空对象。deprecateddeprecationdeprecation

还可以通过将批注添加到公开已弃用属性的 getter 以声明方式指定弃用。 例如,假设该属性令人困惑,并已重命名为 。 以下示例演示如何处理这种情况:@DeprecatedConfigurationPropertymy.app.targetmy.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;
	}

}
无法设置 . 始终假定为,因为代码仍在处理该属性。levelwarning

前面的代码确保已弃用的属性仍然有效(委托给后台的属性)。 从公共 API 中删除 and 方法后,元数据中的自动弃用提示也会消失。 如果要保留提示,请添加具有弃用级别的手动元数据可确保用户仍会了解该属性。 当提供 a 时,这样做特别有用。namegetTargetsetTargeterrorreplacement

名字 类型 目的

name

字符串

属性的全名。 名称采用小写的句点分隔形式(例如,)。 此属性是必需的。server.address

type

字符串

属性的数据类型的完整签名(例如,),但也包括完整的泛型类型(例如 )。 您可以使用此属性来指导用户输入他们可以输入的值类型。 为了保持一致性,使用其包装器对应项指定基元的类型(例如,成为 )。 请注意,此类可能是一个复杂类型,当值绑定时,它会从 转换而来。 如果类型未知,则可以省略。java.lang.Stringjava.util.Map<java.lang.String,com.example.MyEnum>booleanjava.lang.BooleanString

description

字符串

可以向用户显示的属性的简短说明。 如果没有可用的描述,则可以省略它。 建议描述是简短的段落,第一行提供简明扼要的摘要。 描述中的最后一行应以句点 () 结尾。.

sourceType

字符串

提供此属性的源的类名。 例如,如果该属性来自用 批注的类,则此属性将包含该类的完全限定名称。 如果源类型未知,则可以省略。@ConfigurationProperties

defaultValue

对象

默认值,如果未指定该属性,则使用该值。 如果属性的类型是数组,则它可以是值数组。 如果默认值未知,则可以省略该值。

deprecation

折旧

指定是否弃用该属性。 如果该字段未弃用或该信息未知,则可以省略该字段。 下表提供了有关该属性的更多详细信息。deprecation

名字 类型 目的

level

字符串

弃用级别,可以是(默认值)或 . 当属性具有弃用级别时,它仍应绑定到环境中。 但是,当它具有弃用级别时,该属性将不再受管理且未绑定。warningerrorwarningerror

reason

字符串

对该属性被弃用的原因的简短说明。 如果没有原因,可以省略。 建议描述是简短的段落,第一行提供简明扼要的摘要。 描述中的最后一行应以句点 () 结尾。.

replacement

字符串

替换此已弃用属性的属性的全名。 如果没有替代此属性,则可以省略它。

since

字符串

属性被弃用的版本。 可以省略。

在 Spring Boot 1.3 之前,可以使用单个布尔属性来代替元素。 这仍以不推荐使用的方式受支持,不应再使用。 如果没有可用的原因和替换,则应设置一个空对象。deprecateddeprecationdeprecation
无法设置 . 始终假定为,因为代码仍在处理该属性。levelwarning

提示属性

数组中包含的 JSON 对象可以包含下表中显示的属性:hints

名字 类型 目的

name

字符串

此提示所引用的属性的全名。 名称采用小写的句点分隔形式(如 )。 如果该属性引用映射(如 ),则提示将应用于映射 () 的或映射的值 ()。 此属性是必需的。spring.mvc.servlet.pathsystem.contextssystem.contexts.keyssystem.contexts.values

values

值提示[]

对象定义的有效值列表(如下表所述)。 每个条目都定义值,并且可能具有说明。ValueHint

providers

值提供程序[]

由对象定义的提供程序列表(在本文档后面介绍)。 每个条目定义提供程序的名称及其参数(如果有)。ValueProvider

每个元素的属性中包含的 JSON 对象可以包含下表中描述的属性:valueshint

名字 类型 目的

value

对象

提示所引用的元素的有效值。 如果属性的类型是数组,则它也可以是值数组。 此属性是必需的。

description

字符串

可以向用户显示的值的简短说明。 如果没有可用的描述,则可以省略它。 建议描述是简短的段落,第一行提供简明扼要的摘要。 描述中的最后一行应以句点 () 结尾。.

每个元素的属性中包含的 JSON 对象可以包含下表中描述的属性:providershint

名字 类型 目的

name

字符串

用于为提示所引用的元素提供其他内容帮助的提供程序的名称。

parameters

JSON 对象

提供程序支持的任何其他参数(有关详细信息,请查看提供程序的文档)。

名字 类型 目的

name

字符串

此提示所引用的属性的全名。 名称采用小写的句点分隔形式(如 )。 如果该属性引用映射(如 ),则提示将应用于映射 () 的或映射的值 ()。 此属性是必需的。spring.mvc.servlet.pathsystem.contextssystem.contexts.keyssystem.contexts.values

values

值提示[]

对象定义的有效值列表(如下表所述)。 每个条目都定义值,并且可能具有说明。ValueHint

providers

值提供程序[]

由对象定义的提供程序列表(在本文档后面介绍)。 每个条目定义提供程序的名称及其参数(如果有)。ValueProvider

名字 类型 目的

value

对象

提示所引用的元素的有效值。 如果属性的类型是数组,则它也可以是值数组。 此属性是必需的。

description

字符串

可以向用户显示的值的简短说明。 如果没有可用的描述,则可以省略它。 建议描述是简短的段落,第一行提供简明扼要的摘要。 描述中的最后一行应以句点 () 结尾。.

名字 类型 目的

name

字符串

用于为提示所引用的元素提供其他内容帮助的提供程序的名称。

parameters

JSON 对象

提供程序支持的任何其他参数(有关详细信息,请查看提供程序的文档)。

重复的元数据项

具有相同“属性”和“组”名称的对象可以在元数据文件中多次出现。 例如,可以将两个单独的类绑定到同一前缀,每个类都可能具有重叠的属性名称。 虽然在元数据中多次出现的相同名称不应常见,但元数据的使用者应注意确保它们支持它。