手動ヒントの提供

ユーザーエクスペリエンスを向上させ、特定のプロパティの構成をさらに支援するために、次の追加のメタデータを提供できます。

  • プロパティの潜在的な値のリストを記述します。

  • ツールがプロジェクトのコンテキストに基づいて潜在的な値のリストを検出できるように、プロバイダーを関連付けて、明確に定義されたセマンティクスをプロパティに関連付けます。

値ヒント

各ヒントの name 属性は、プロパティの name を参照します。示し最初の例では、spring.jpa.hibernate.ddl-auto プロパティに 5 つの値 nonevalidateupdatecreatecreate-drop を提供します。各値には説明も含まれる場合があります。

プロパティが Map (標準 Javadoc) 型の場合、キーと値の両方にヒントを提供できます (ただし、マップ自体にヒントを提供することはできません)。特殊な .keys および .values サフィックスは、それぞれキーと値を参照する必要があります。

次の例に示すように、my.contexts がマジック String (標準 Javadoc) 値を整数にマッピングすると仮定します。

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

}

マジック値は (この例では) sample1 および sample2 です。キーの追加コンテンツ支援を提供するには、次の JSON をモジュールの手動メタデータに追加します。

{"hints": [
	{
		"name": "my.contexts.keys",
		"values": [
			{
				"value": "sample1"
			},
			{
				"value": "sample2"
			}
		]
	}
]}
これら 2 つの値の代わりに Enum (標準 Javadoc) を使用することをお勧めします。IDE がサポートしている場合、これが自動補完の最も効果的な方法です。

バリュープロバイダー

プロバイダーは、セマンティクスをプロパティに付加する強力な方法です。このセクションでは、独自のヒントに使用できる公式プロバイダーを定義します。ただし、お気に入りの IDE はこれらの一部を実装する場合と、まったく実装しない場合があります。また、最終的には独自のものを提供できます。

これは新しい機能であるため、IDE ベンダーはその機能に追いつく必要があります。採用時間は当然異なります。

次の表は、サポートされるプロバイダーのリストをまとめたものです。

名前 説明

any

追加の値の提供を許可します。

class-reference

プロジェクトで使用可能なクラスを自動補完します。通常、target パラメーターで指定された基本クラスによって制約されます。

handle-as

必須の target パラメーターで定義された型で定義されているかのようにプロパティを処理します。

logger-name

有効なロガー名とロガーグループを自動補完します。通常、現在のプロジェクトで使用可能なパッケージ名とクラス名は、定義されたグループと同様に自動補完できます。

spring-bean-reference

現在のプロジェクトで使用可能な Bean 名を自動補完します。通常、target パラメーターで指定された基本クラスによって制約されます。

spring-profile-name

プロジェクトで使用可能な Spring プロファイル名を自動補完します。

特定のプロパティに対してアクティブにできるプロバイダーは 1 つだけですが、すべてのプロバイダーが何らかの方法でプロパティ管理できる場合は、複数のプロバイダーを指定できます。IDE は処理可能な JSON セクションの最初のプロバイダーを使用する必要があるため、最も強力なプロバイダーを最初に配置してください。特定のプロパティのプロバイダーがサポートされていない場合、特別なコンテンツ支援も提供されません。

任意

特別な any provider 値により、追加の値を提供できます。サポートされている場合は、プロパティ型に基づいた定期的な値検証を適用する必要があります。

通常、このプロバイダーは、値のリストがあり、追加の値が有効であると見なされる場合に使用されます。

次の例は、system.state の自動補完値として on および off を提供しています。

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

上記の例では、他の値も許可されています。

クラス参照

クラス参照プロバイダーは、プロジェクトで使用可能なクラスを自動補完します。このプロバイダーは、次のパラメーターをサポートしています。

パラメーター タイプ デフォルト値 説明

target

String (標準 Javadoc) (Class)

なし

選択した値に割り当てる必要があるクラスの完全修飾名。通常、非候補クラスのフィルタリングに使用されます。この情報は、適切な上限を持つクラスを公開することにより、型自体によって提供できることに注意してください。

concrete

boolean

true

具象クラスのみを有効な候補と見なすかどうかを指定します。

次のメタデータスニペットは、使用するクラス名が HttpServlet (英語) でなければならないことを定義する標準の server.servlet.jsp.class-name プロパティに対応しています。

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

ハンドル

handle-as プロバイダーを使用すると、プロパティの型をより高レベルの型に置き換えることができます。これは通常、プロパティが String (標準 Javadoc) 型の場合に発生します。これは、構成クラスがクラスパス上にない可能性のあるクラスに依存しないようにするためです。このプロバイダーは、次のパラメーターをサポートしています。

パラメーター タイプ デフォルト値 説明

target

String (標準 Javadoc) (Class)

なし

プロパティについて考慮する型の完全修飾名。このパラメーターは必須です。

次の型を使用できます。

  • 任意の Enum (標準 Javadoc) : プロパティに指定可能な値をリストします。(IDE が値を自動補完するのにこれ以上のヒントは必要ないため、Enum (標準 Javadoc) 型でプロパティを定義することをお勧めします。)

  • Charset (標準 Javadoc) : 文字セット / エンコード値の自動補完をサポート (UTF-8 など)

  • Locale (標準 Javadoc) : ロケールの自動補完 (en_US など)

  • MimeType (Javadoc) : コンテンツ型の値の自動補完をサポート (text/plain など)

  • Resource (Javadoc) : ファイルシステムまたはクラスパス上のファイルを参照するための Spring のリソース抽象化の自動補完をサポート (classpath:/sample.properties など)

複数の値を提供できる場合は、Collection (標準 Javadoc) または配列型を使用して IDE にそのことを伝えます。

次のメタデータスニペットは、使用する変更ログへのパスを定義する標準の spring.liquibase.change-log プロパティに対応しています。これは実際には内部的に Resource (Javadoc) として使用されますが、Liquibase API に渡すために元の文字列値を保持する必要があるため、そのように公開することはできません。

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

ロガー名

logger-name プロバイダーは、有効なロガー名とロガーグループを自動補完します。通常、現在のプロジェクトで使用可能なパッケージ名とクラス名を自動補完できます。グループが有効 (デフォルト) で、構成でカスタムロガーグループが識別されている場合は、そのグループの自動補完が提供されるはずです。特定のフレームワークには、サポートできる追加のマジックロガー名がある場合があります。

このプロバイダーは、次のパラメーターをサポートしています。

パラメーター タイプ デフォルト値 説明

group

boolean

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 (標準 Javadoc) (Class)

なし

候補者に割り当てられる Bean クラスの完全修飾名。通常、候補ではない Bean を除外するために使用されます。

次のメタデータスニペットは、使用する MBeanServer (標準 Javadoc) Bean の名前を定義する標準の spring.jmx.server プロパティに対応しています。

{"hints": [
	{
		"name": "spring.jmx.server",
		"providers": [
			{
				"name": "spring-bean-reference",
				"parameters": {
					"target": "javax.management.MBeanServer"
				}
			}
		]
	}
]}
バインダーはメタデータを認識しません。そのヒントを提供する場合は、Bean 名を ApplicationContext (Javadoc) が使用する実際の Bean 参照に変換する必要があります。

Spring プロファイル名

spring-profile-name プロバイダーは、現在のプロジェクトの構成で定義されている Spring プロファイルを自動補完します。

次のメタデータスニペットは、有効にする Spring プロファイルの名前を定義する標準 spring.profiles.active プロパティに対応しています。

{"hints": [
	{
		"name": "spring.profiles.active",
		"providers": [
			{
				"name": "spring-profile-name"
			}
		]
	}
]}