1. 概要

Springアプリケーションにランタイムプロパティを挿入する場合、カスタムプロパティのグループに対してクラスをbean定義することがあります。

IntelliJは、組み込みプロパティBeanのヘルプとオートコンプリートを提供します。 ただし、カスタムプロパティにこれらを提供するには、少し助けが必要です。

この短いチュートリアルでは、開発プロセスを容易にするために、これらのプロパティをIntelliJに公開する方法を見ていきます。

2. カスタムプロパティ

IntelliJがアプリケーションのプロパティに関して提供できる画面上のヘルプを見てみましょう。

ここで、プロパティurlおよびtimeout-in-millisecondsはカスタムプロパティです。 説明、タイプ、およびオプションのデフォルト値が表示されます。

ただし、プロパティが不明な場合、IntelliJは警告を表示します。

これは、メタデータがないと、IntelliJは私たちを助けることができないためです。

それでは、これを修正するために何をしなければならないかを見てみましょう。

3. 依存関係

まず、spring-boot-configuration-processor依存関係をpom.xmlに追加する必要があります。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

spring-boot-configuration-processorは、プロジェクトをビルドするたびに呼び出されます。 メタデータファイルを作成します t arget / classes /META-INF/。 

依存関係はオプションとしてマークされています。これは、誰かがプロジェクトを依存関係として使用するときに継承されないことを意味します。

次に、 spring-boot-configuration-processorがメタデータの作成に使用される情報を取得する場所を確認します。

4. @ConfigurationPropertiesを使用した構成メタデータ

@ConfigurationPropertiesで注釈が付けられたクラスでプロパティを定義します。

@Configuration
@ConfigurationProperties(prefix = "com.baeldung")
public class CustomProperties {

    /**
     * The url to connect to.
     */
    String url;

    /**
     * The time to wait for the connection.
     */
    private int timeoutInMilliSeconds = 1000;

    // Getters and Setters

}

ここで、クラスには、プロパティ名、それらのタイプ、および初期化子リストで提供されるデフォルトが含まれています。 また、Javadocは各プロパティの説明を提供します。

ビルド中、 アノテーションプロセッサは、アノテーションが付けられているすべてのクラスを検索します @ConfigurationProperties。 クラスのインスタンス変数ごとにカスタムプロパティメタデータを生成します。

5. 構成メタデータファイル

5.1. メタデータファイルの形式

カスタムプロパティを記述したメタデータファイルは、IntelliJのコンテキストヘルプを駆動します。次に例を示します。

{
  "groups": [
    {
      "name": "com.baeldung",
      "type": "com.baeldung.configuration.processor.CustomProperties",
      "sourceType": "com.baeldung.configuration.processor.CustomProperties"
    }
  ],
  "properties": [
    {
      "name": "com.baeldung.url",
      "type": "java.lang.String",
      "description": "The url to connect to.",
      "sourceType": "com.baeldung.configuration.processor.CustomProperties"
    },
    {
      "name": "com.baeldung.timeout-in-milli-seconds",
      "type": "java.lang.Integer",
      "description": "The time to wait for the connection.",
      "sourceType": "com.baeldung.configuration.processor.CustomProperties",
      "defaultValue": 1000
    }
  ],
  "hints": []
}

注釈プロセッサがコードからこのファイルを生成するため、このファイルを直接確認または編集する必要はありません

5.2. ConfigurationPropertiesBeanのないメタデータ

@ConfigurationProperties によって導入されていない既存のプロパティがあるが、それらのメタデータファイルが必要な場合は、IntelliJが役立ちます。

以前の警告メッセージを詳しく見てみましょう。

ここに、定義キーオプションが表示されます。このオプションを使用して、additional-spring-configuration-metadata.jsonファイルを作成できます。 作成されたファイルは次のようになります。

{
  "properties": [
    {
      "name": "com.baeldung.timeoutInMilliSeconds",
      "type": "java.lang.String",
      "description": "Description for com.baeldung.timeoutInMilliSeconds."
    }
  ]
}

他の場所からのプロパティに関する情報がないため、その中のメタデータを手動で編集する必要があります。デフォルトのタイプは常にの文字列です。

ファイルにいくつかの追加情報を入れましょう:

{
  "properties": [
    {
      "name": "com.baeldung.timeout-in-milli-seconds",
      "type": "java.lang.Integer",
      "description": "The time to wait for the connection.",
      "sourceType": "com.baeldung.configuration.processor.CustomProperties",
      "defaultValue": 1000
    }
  ]
}

新しいプロパティがオートコンプリートで表示されるようにするには、プロジェクトを再構築する必要があることに注意してください。

また、このメタデータファイルを生成するオプションは、不明なプロパティに対するIntelliJのAlt+ENTERショートカットを介して利用できることにも注意してください。

6. 結論

この記事では、IntelliJが構成プロパティメタデータを使用してプロパティファイルのヘルプを提供する方法について説明しました。

Springのアノテーションプロセッサを使用してカスタムクラスからメタデータを生成する方法を見ました。 次に、IntelliJでショートカットを使用して、手動で編集するメタデータファイルを作成する方法を説明しました。

いつものように、この記事の例のコードは、GitHubにあります。