效果
在使用Idea等开发工具时,配置文件中输入前缀就有对应的补全提示,使开发者可以很方便配置相应属性,效果截图如下:
元数据说明
这些提示来自于 spring 自动配置规范中的源数据文件 spring-configuration-metadata.json
和 additional-spring-configuration-metadata.json
中内容的定义。有了固定规范后,开发工具则可以从对应的json源数据文件中加载到对应的信息补全提示,使开发过程更加友好便捷。
spring-configuration-metadata.json
由插件 spring-boot-configuration-processor
自动生成,additional-spring-configuration-metadata.json
则为附加配置需要手工维护。因为自动生成会在每次编译后重新覆盖所以才有了这个附加配置文件。自动生成需要结合定义的Java类、使用 @ConfigurationProperties
注解修饰、才可以被插件 spring-boot-configuration-processor
加载并自动生成到 spring-configuration-metadata.json
中。
附:其他几个关于 SpringBoot 自动配置的主要文件
配置文件:spring.factories
配置文件:spring-configuration-metadata.json
和additional-spring-configuration-metadata.json
配置文件:spring-autoconfigure-metadata.properties
插件:spring-boot-configuration-processor
插件:spring-boot-autoconfigure-processor
DeferredImportSelector选择器:AutoConfigurationImportSelector
开发实现
为了实现上文效果,下面是具体的代码实例:
1、定义一个 Java 配置类
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 测试配置类
*
* @author shanhy
*/
@Data
@Component
@ConfigurationProperties(prefix = "shanhy.test")
public class TestProperties {
/**
* 唯一ID
*/
private int id = 100;
/**
* 名称
*/
private String name;
/**
* 标志位
*/
private boolean flag = true;
}
其中属性上面的Java注释最终会自动生成到元数据文件 spring-configuration-metadata.json
中,所以请严格添加注释描述。
2、添加插件依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
这个插件就是自动生成元数据文件内容的,如果你不需要使用插件自动生成元数据,而希望自己定义的属性配置的元数据,则自行维护
resources/META-INF/additional-spring-configuration-metadata.json
即可。
3、编译并验证结果
使用Mavan编译生成元数据文件,然后在 properties 中验证结果。
为了验证自定义附加的元数据,我在文件 resources/META-INF/additional-spring-configuration-metadata.json
中添加了一个自定义配置:
{
"properties": [
{
"name": "shanhy.test.additional-content",
"type": "java.lang.Boolean",
"description": "附加内容"
}
]
}
(END)