2016年5月4日水曜日

[Spring Boot]ConfigurationPropertiesなクラスからメタデータを生成してpropertiesファイルで補完を有効にする

カスタムな設定値を定義した場合に、application.propertiesでIDEの補完を有効にする方法。

設定値を受け取るクラスを作成

@ConfigurationPropertiesアノテーションが設定されたクラスを作成します。
このクラスの場合、「sample.name」と「sample.hoge」という設定値を保持します。
@Component
@ConfigurationProperties(prefix = "sample")
public class SampleConfiguration {

    private String name;

    private String hoge;

    // setterとgetterは省略
}

メタ情報を生成するためのライブラリをビルドスクリプトに追加

上で作ったConfigurationPropertiesアノテーションが設定されたクラスから、メタ情報(jsonファイル)を生成するためのライブラリをビルドスクリプトに追加します。

基本的にこのリンク先通りに設定してあげます。configuration-metadata-annotation-processor

Gradleの場合は、以下の様になります。(必要な箇所のみ)
buildscript {
  repositories {
    mavenCentral()
    maven { url 'https://repo.spring.io/plugins-release' }
  }
  dependencies {
    classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.7'
  }
}

configure(allprojects) {
  apply plugin: 'propdeps'
  apply plugin: 'propdeps-maven'
  apply plugin: 'propdeps-idea'
  apply plugin: 'propdeps-eclipse'
}

dependencies {
  optional "org.springframework.boot:spring-boot-configuration-processor"
}

compileJava.dependsOn(processResources)

IDEの設定でアノテーションプロセッサーを有効にする

IntelliJ IDEAの場合は、設定画面の「Annotation Processors」から有効化します。

プロジェクトをビルドする

プロジェクトをビルドすることでメタデータが生成されるようになります。
今回の場合は、以下のjsonが出力されます。
{
  "groups": [{
    "name": "sample",
    "type": "com.example.SampleConfiguration",
    "sourceType": "com.example.SampleConfiguration"
  }],
  "properties": [
    {
      "name": "sample.hoge",
      "type": "java.lang.String",
      "description": "ほげ",
      "sourceType": "com.example.SampleConfiguration"
    },
    {
      "name": "sample.name",
      "type": "java.lang.String",
      "description": "名前",
      "sourceType": "com.example.SampleConfiguration"
    }
  ],
  "hints": []
}

IDEで使ってみる

この画像のように、メタデータをもとにプロパティとして使えるものがリスト表示されます。