提供手动提示

为了改善用户体验并进一步帮助用户配置给定属性,您可以提供额外的元数据,这些元数据

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

  • 关联一个提供者,以赋予属性一个明确定义的语义,以便工具可以根据项目上下文发现潜在值列表。

值提示

每个提示的 name 属性指代属性的 name。在之前显示的初始示例中,我们为 spring.jpa.hibernate.ddl-auto 属性提供了五个值:nonevalidateupdatecreatecreate-drop。每个值也可以有描述。

如果你的属性是 Map 类型,你可以为键和值(但不能为映射本身)提供提示。特殊的 .keys.values 后缀必须分别指代键和值。

假设 my.contexts 将魔法 String 值映射到整数,如以下示例所示

  • Java

  • Kotlin

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;
	}

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

@ConfigurationProperties("my")
class MyProperties(val contexts: Map<String, Int>)

(在此示例中)的魔法值是 sample1sample2。为了为键提供额外的代码辅助,您可以将以下 JSON 添加到模块的手动元数据

{"hints": [
	{
		"name": "my.contexts.keys",
		"values": [
			{
				"value": "sample1"
			},
			{
				"value": "sample2"
			}
		]
	}
]}
提示也可以添加到外部类型中,并在使用该类型时应用。
我们建议您为这两个值使用 Enum。如果您的 IDE 支持它,这是目前最有效的自动完成方法。

值提供者

提供者是为属性附加语义的强大方式。在本节中,我们定义了您可以用于自己提示的官方提供者。然而,您喜欢的 IDE 可能实现了其中一些或一个都没有。此外,它最终可能会提供自己的。

由于这是一个新功能,IDE 供应商必须跟上其工作方式。采用时间自然会有所不同。

下表总结了支持的提供者列表

名称 描述

任何

允许提供任何额外的值。

类引用

自动完成项目中可用的类。通常受 target 参数指定的基类限制。

处理为

将属性视为由强制 target 参数定义的类型定义。

记录器名称

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

Spring Bean 引用

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

Spring Profile 名称

自动完成项目中可用的 Spring Profile 名称。

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

任何

特殊的 any 提供者值允许提供任何额外的值。如果支持,应应用基于属性类型的常规值验证。

此提供者通常用于您有一个值列表,并且任何额外的值仍应被视为有效的情况。

以下示例为 system.state 提供了 onoff 作为自动完成值

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

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

类引用

class-reference 提供者自动完成项目中可用的类。此提供者支持以下参数

参数 类型 默认值 描述

target

String (Class)

应可分配给所选值的类的完全限定名。通常用于过滤掉非候选类。请注意,此信息可以通过类型本身暴露一个具有适当上限的类来提供。

具体

布尔值

true

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

以下元数据片段对应于标准 server.servlet.jsp.class-name 属性,该属性定义要使用的类名必须是 HttpServlet

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

处理为

handle-as 提供者允许您将属性的类型替换为更高级别的类型。这通常发生在属性是 String 类型时,因为您不希望您的配置类依赖于可能不在类路径中的类。此提供者支持以下参数

参数 类型 默认值 描述

target

String (Class)

要为属性考虑的类型的完全限定名。此参数是强制性的。

可以使用以下类型

  • 任何 Enum:列出属性的可能值。(我们建议使用 Enum 类型定义属性,因为 IDE 自动完成这些值不需要进一步的提示)

  • Charset:支持字符集/编码值(例如 UTF-8)的自动完成

  • Locale:区域设置的自动完成(例如 en_US

  • MimeType:支持内容类型值(例如 text/plain)的自动完成

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

如果可以提供多个值,请使用 CollectionArray 类型来告知 IDE。

以下元数据片段对应于标准 spring.liquibase.change-log 属性,该属性定义要使用的变更日志的路径。它实际上在内部用作 Resource,但不能这样暴露,因为我们需要保留原始字符串值以将其传递给 Liquibase API。

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

记录器名称

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

此提供者支持以下参数

参数 类型 默认值 描述

group

布尔值

true

指定是否应考虑已知组。

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

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

{"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。

以下元数据片段对应于标准 spring.jmx.server 属性,该属性定义要使用的 MBeanServer Bean 的名称

{"hints": [
	{
		"name": "spring.jmx.server",
		"providers": [
			{
				"name": "spring-bean-reference",
				"parameters": {
					"target": "javax.management.MBeanServer"
				}
			}
		]
	}
]}
绑定器不了解元数据。如果您提供该提示,您仍然需要使用 ApplicationContext 将 Bean 名称转换为实际的 Bean 引用。

Spring Profile 名称

spring-profile-name 提供者自动完成当前项目配置中定义的 Spring Profile。

以下元数据片段对应于标准 spring.profiles.active 属性,该属性定义要启用的 Spring Profile 的名称

{"hints": [
	{
		"name": "spring.profiles.active",
		"providers": [
			{
				"name": "spring-profile-name"
			}
		]
	}
]}
© . This site is unofficial and not affiliated with VMware.