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

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

若要改善用户体验并进一步帮助用户配置给定属性,可以提供以下附加元数据:

  • 描述属性的潜在值列表。

  • 关联提供程序,将定义良好的语义附加到属性,以便工具可以根据项目的上下文发现潜在值列表。

价值提示

每个提示的属性都是指属性的属性。 在前面所示的初始示例中,我们为属性提供了五个值:、 、 、 和 。 每个值也可以有一个说明。namenamespring.jpa.hibernate.ddl-autononevalidateupdatecreatecreate-drop

如果您的属性是 类型,则可以为键和值提供提示(但不能为地图本身提供提示)。 特殊和后缀必须分别引用键和值。Map.keys.values

假设将魔术值映射到整数,如以下示例所示:my.contextsString

import java.util.Map;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties("my")
public class MyProperties {

	private Map<String, Integer> contexts;

	// getters/setters ...

	public Map<String, Integer> getContexts() {
		return this.contexts;
	}

	public void setContexts(Map<String, Integer> contexts) {
		this.contexts = contexts;
	}

}

幻值是(在本例中)是 和 。 为了为密钥提供额外的内容帮助,您可以将以下 JSON 添加到模块的手动元数据中:sample1sample2

{"hints": [
	{
		"name": "my.contexts.keys",
		"values": [
			{
				"value": "sample1"
			},
			{
				"value": "sample2"
			}
		]
	}
]}
建议改用 an for 这两个值。 如果您的 IDE 支持它,那么这是迄今为止最有效的自动完成方法。Enum
建议改用 an for 这两个值。 如果您的 IDE 支持它,那么这是迄今为止最有效的自动完成方法。Enum

价值提供者

提供程序是将语义附加到属性的有效方法。 在本节中,我们将定义可用于您自己的提示的官方提供商。 但是,您最喜欢的 IDE 可能会实现其中的一些或不实现其中的任何一种。 此外,它最终可以提供自己的。

由于这是一项新功能,IDE 供应商必须了解它的工作原理。 采用时间自然会有所不同。

下表汇总了受支持的提供程序列表:

名字 描述

any

允许提供任何附加值。

class-reference

自动完成项目中可用的类。 通常由参数指定的基类约束。target

handle-as

处理属性,就好像它是由必需参数定义的类型定义的一样。target

logger-name

自动完成有效的记录器名称和记录器组。 通常,当前项目中可用的包和类名称以及定义的组可以自动完成。

spring-bean-reference

自动完成当前项目中可用的 Bean 名称。 通常由参数指定的基类约束。target

spring-profile-name

自动完成项目中可用的 Spring 配置文件名称。

对于给定属性,只能有一个提供程序处于活动状态,但如果它们都可以以某种方式管理该属性,则可以指定多个提供程序。 请确保将功能最强大的提供程序放在首位,因为 IDE 必须使用它可以处理的 JSON 部分中的第一个提供程序。 如果不支持给定属性的提供程序,则也不会提供特殊内容帮助。

任何

特殊的任何提供程序值允许提供任何其他值。 如果支持,则应应用基于属性类型的常规值验证。

如果您有一个值列表,并且任何额外的值仍应被视为有效,则通常使用此提供程序。

以下示例提供 和 作为自动完成值:onoffsystem.state

{"hints": [
	{
		"name": "system.state",
		"values": [
			{
				"value": "on"
			},
			{
				"value": "off"
			}
		],
		"providers": [
			{
				"name": "any"
			}
		]
	}
]}

请注意,在前面的示例中,还允许使用任何其他值。

类参考

类引用提供程序自动完成项目中可用的类。 此提供程序支持以下参数:

参数 类型 默认值 描述

target

String (Class)

没有

应分配给所选值的类的完全限定名称。 通常用于筛选出非候选类。 请注意,此信息可以由类型本身提供,方法是公开具有适当上限的类。

concrete

boolean

指定是否仅将具体类视为有效候选项。

以下元数据代码段对应于定义要使用的类名的标准属性:server.servlet.jsp.class-nameJspServlet

{"hints": [
	{
		"name": "server.servlet.jsp.class-name",
		"providers": [
			{
				"name": "class-reference",
				"parameters": {
					"target": "jakarta.servlet.http.HttpServlet"
				}
			}
		]
	}
]}

句柄为

句柄作为提供程序允许您将属性的类型替换为更高级的类型。 这通常发生在属性具有类型时,因为您不希望配置类依赖于可能不在类路径上的类。 此提供程序支持以下参数:java.lang.String

参数 类型 默认值 描述

target

String (Class)

没有

要为属性考虑的类型的完全限定名称。 此参数是必需的。

可以使用以下类型:

  • Any :列出属性的可能值。 (建议使用类型定义属性,因为 IDE 不需要进一步的提示即可自动完成值)java.lang.EnumEnum

  • java.nio.charset.Charset:支持字符集/编码值的自动补全(例如UTF-8)

  • java.util.Locale:自动完成语言环境(例如en_US)

  • org.springframework.util.MimeType:支持内容类型值的自动补全(如text/plain)

  • org.springframework.core.io.Resource:支持自动完成 Spring 的 Resource 抽象,以引用文件系统或类路径上的文件(例如classpath:/sample.properties)

如果可以提供多个值,请使用 or Array 类型向 IDE 介绍它。Collection

以下元数据代码段对应于定义要使用的更改日志路径的标准属性。 它实际上在内部用作 a,但不能公开,因为我们需要保留原始的 String 值才能将其传递给 Liquibase API。spring.liquibase.change-logorg.springframework.core.io.Resource

{"hints": [
	{
		"name": "spring.liquibase.change-log",
		"providers": [
			{
				"name": "handle-as",
				"parameters": {
					"target": "org.springframework.core.io.Resource"
				}
			}
		]
	}
]}

记录器名称

记录器名称提供程序会自动完成有效的记录器名称和记录器组。 通常,当前项目中可用的包和类名可以自动完成。 如果组已启用(默认),并且在配置中标识了自定义记录器组,则应为其提供自动完成。 特定框架可能具有额外的魔术记录器名称,这些名称也可以支持。

此提供程序支持以下参数:

参数 类型 默认值 描述

group

boolean

true

指定是否应考虑已知组。

由于记录器名称可以是任意名称,因此此提供程序应允许任何值,但可以突出显示项目类路径中不可用的有效包和类名称。

以下元数据代码段对应于标准属性。 键是记录器名称,值对应于标准日志级别或任何自定义级别。 由于 Spring Boot 定义了一些开箱即用的记录器组,因此为这些组添加了专用的价值提示。logging.level

{"hints": [
	{
		"name": "logging.level.keys",
		"values": [
			{
				"value": "root",
				"description": "Root logger used to assign the default logging level."
			},
			{
				"value": "sql",
				"description": "SQL logging group including Hibernate SQL logger."
			},
			{
				"value": "web",
				"description": "Web logging group including codecs."
			}
		],
		"providers": [
			{
				"name": "logger-name"
			}
		]
	},
	{
		"name": "logging.level.values",
		"values": [
			{
				"value": "trace"
			},
			{
				"value": "debug"
			},
			{
				"value": "info"
			},
			{
				"value": "warn"
			},
			{
				"value": "error"
			},
			{
				"value": "fatal"
			},
			{
				"value": "off"
			}

		],
		"providers": [
			{
				"name": "any"
			}
		]
	}
]}

Spring Bean 参考

spring-bean-reference 提供程序会自动完成在当前项目配置中定义的 bean。 此提供程序支持以下参数:

参数 类型 默认值 描述

target

String (Class)

没有

应分配给候选项的 Bean 类的完全限定名称。 通常用于过滤掉非候选 Bean。

以下元数据代码段对应于定义要使用的 Bean 名称的标准属性:spring.jmx.serverMBeanServer

{"hints": [
	{
		"name": "spring.jmx.server",
		"providers": [
			{
				"name": "spring-bean-reference",
				"parameters": {
					"target": "javax.management.MBeanServer"
				}
			}
		]
	}
]}
活页夹不知道元数据。 如果提供该提示,则仍需要使用 将 Bean 名称转换为实际的 Bean 引用。ApplicationContext

Spring 配置文件名称

spring-profile-name 提供程序会自动完成在当前项目配置中定义的 Spring 配置文件。

以下元数据代码段对应于定义要启用的 Spring 配置文件名称的标准属性:spring.profiles.active

{"hints": [
	{
		"name": "spring.profiles.active",
		"providers": [
			{
				"name": "spring-profile-name"
			}
		]
	}
]}
由于这是一项新功能,IDE 供应商必须了解它的工作原理。 采用时间自然会有所不同。
名字 描述

any

允许提供任何附加值。

class-reference

自动完成项目中可用的类。 通常由参数指定的基类约束。target

handle-as

处理属性,就好像它是由必需参数定义的类型定义的一样。target

logger-name

自动完成有效的记录器名称和记录器组。 通常,当前项目中可用的包和类名称以及定义的组可以自动完成。

spring-bean-reference

自动完成当前项目中可用的 Bean 名称。 通常由参数指定的基类约束。target

spring-profile-name

自动完成项目中可用的 Spring 配置文件名称。

对于给定属性,只能有一个提供程序处于活动状态,但如果它们都可以以某种方式管理该属性,则可以指定多个提供程序。 请确保将功能最强大的提供程序放在首位,因为 IDE 必须使用它可以处理的 JSON 部分中的第一个提供程序。 如果不支持给定属性的提供程序,则也不会提供特殊内容帮助。
参数 类型 默认值 描述

target

String (Class)

没有

应分配给所选值的类的完全限定名称。 通常用于筛选出非候选类。 请注意,此信息可以由类型本身提供,方法是公开具有适当上限的类。

concrete

boolean

指定是否仅将具体类视为有效候选项。

参数 类型 默认值 描述

target

String (Class)

没有

要为属性考虑的类型的完全限定名称。 此参数是必需的。

如果可以提供多个值,请使用 or Array 类型向 IDE 介绍它。Collection
参数 类型 默认值 描述

group

boolean

true

指定是否应考虑已知组。

参数 类型 默认值 描述

target

String (Class)

没有

应分配给候选项的 Bean 类的完全限定名称。 通常用于过滤掉非候选 Bean。

活页夹不知道元数据。 如果提供该提示,则仍需要使用 将 Bean 名称转换为实际的 Bean 引用。ApplicationContext