Spring Boot 配置文件配置自动提示 Configuration Processor

效果

在使用Idea等开发工具时,配置文件中输入前缀就有对应的补全提示,使开发者可以很方便配置相应属性,效果截图如下:

在这里插入图片描述
在这里插入图片描述

元数据说明

这些提示来自于 spring 自动配置规范中的源数据文件 spring-configuration-metadata.jsonadditional-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.jsonadditional-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": "附加内容"
    }
  ]
}

在这里插入图片描述
在这里插入图片描述

扫描二维码关注公众号,回复: 16694290 查看本文章

(END)

猜你喜欢

转载自blog.csdn.net/catoop/article/details/129937681