AdSense

網頁

2020/9/30

Spring Boot Configuration Processor 用途

Spring Boot spring-boot-configuration-processor用途如下。

spring-boot-configuration-processor套件能在專案編譯時自動產生@ConfigurationPropertiesproperties類的metadata檔,此檔案提供給IDE在編輯自訂的properites檔時會自動提示配置類中定義的屬性名稱。

範例環境:

  • Java 8
  • Spring Boot 2.3.2.RELEASE
  • Maven
  • Lombok

使用方式先將spring-boot-configuration-processor依賴加入pom.xml<optional>設為true

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

由於spring-boot-configuration-processor只是用來產生metadata檔,程式執行時用不到,所以從spring-boot-maven-plugin的中排除,這樣建構時才不會被打包。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
            </exclude>
        </excludes>
    </configuration>
</plugin>

參考pom.xml設定。

配置好以上並將專案重新compile後,預設會在專案的target/classes/META-INF目錄下產生spring-configuration-metadata.json,此即為供IDE用的properties metadata檔。

例如專案中有一properties類SystemProperties

SystemPorperties

package com.abc.demo.properties;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Getter
@Setter
@ConfigurationProperties(prefix = "system")
public class SystemProperties {

    private String name;    // system.name
    private String version; // system.version
    private String url;     // system.url
    private String port;    // system.port

}

則產生的spring-configuration-metadata.json內容如下。

spring-configuration-metadata.json

{
  "groups": [
    {
      "name": "system",
      "type": "com.abc.demo.properties.SystemProperties",
      "sourceType": "com.abc.demo.properties.SystemProperties"
    }
  ],
  "properties": [
    {
      "name": "system.name",
      "type": "java.lang.String",
      "description": "System Name",
      "sourceType": "com.abc.demo.properties.SystemProperties"
    },
    {
      "name": "system.port",
      "type": "java.lang.String",
      "sourceType": "com.abc.demo.properties.SystemProperties"
    },
    {
      "name": "system.url",
      "type": "java.lang.String",
      "sourceType": "com.abc.demo.properties.SystemProperties"
    },
    {
      "name": "system.version",
      "type": "java.lang.String",
      "description": "System Versoin",
      "sourceType": "com.abc.demo.properties.SystemProperties"
    }
  ],
  "hints": []
}

另外要注意的是IDE同時也要支援properties自動提示的功能才有編輯時彈出自動提示的效果,例如IntelliJ IDEA Community(社群版)本身並沒有支援這功能,所以完全沒提示效果(sad)。即使裝了Spring Assistant plugin也沒用。


參考github


沒有留言:

AdSense