1. 开发中有个东西很好
在开发Spring应用的时候, 经常会给应用添加各种配置属性,
有些第三方包的配置属性很贴心, 配合Idea, 鼠标悬浮在上面就会提示你这个属性是干什么的
例如:
- 在properties文件中编辑的时候, 鼠标悬浮在属性上的弹框
- 自动补全弹框中, 括号里的注释
2. IDEA是从哪读取到这个注释的呢?
Idea会自动读取 META-INF/spring-configuration-metadata.json
这个文件, 获取其中的信息
大家有缘可以看看spring-boot-actuator-autoconfigure
这个jar包中的 \META-INF\spring-configuration-metadata.json
其中就有很多的注释
3. 我项目中的属性也想有注释自动提示
好了, 现在知道了IDE会自动读取 META-INF/spring-configuration-metadata.json
我也想搞一个, 那我是不是也要手写一个这个文件呢? 写起来还挺麻烦的
其实不需要, spring已经给我们提供了一个工具
spring-boot-configuration-processor.jar
我们的项目直接依赖它, 编译之后(包括打jar包) 就会自动生成 META-INF/spring-configuration-metadata.json
3.1 添加Maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- 添加maven插件
<project>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<!-- 添加了这个排除项, 编译后的jar包中就不会有spring-boot-configuration-processor的依赖了 -->
<!-- 只会剩下 META-INF/spring-configuration-metadata.json 文件 -->
<!-- spring-boot-configuration-processor 生成好文件之后历史任务就完成了, 自己被排除掉, 不会影响 引用本项目 的 其他项目 -->
<exclude>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
3.2 给你的配置项添加javadoc
例如:
@Data
@ConfigurationProperties("acme")
public class AcmeProperties {
/**
* 是否检查位置信息
*/
private boolean checkLocation = true;
/**
* 登录超时时间
*/
private Duration loginTimeout = Duration.ofSeconds(3);
}
/**
* 用这种标记包裹起来的注释, 就是javadoc
* spring-boot-configuration-processor 只对javadoc起作用
*/
3.3 编译
当我们添加好注释之后, 正常进行编译后就会自动生成 META-INF/spring-autoconfigure-metadata.properties
文件
4. 用起来效果
我直接使用maven对项目编译
mvn clean install
编译之后就有了
META-INF/spring-autoconfigure-metadata.properties
文件了, 是不是很方便呢
- 再看看打的jar包中是否还依赖着
spring-boot-configuration-processor
OK啦家人们! spring-boot-configuration-processor
是我们的无名英雄!