Spring Boot spring-boot-configuration-processor
用途如下。
spring-boot-configuration-processor
套件能在專案編譯時自動產生@ConfigurationProperties
properties類的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
沒有留言:
張貼留言