方案概览:
在使用SpringBoot自定义starter时,我们经常需要使用application.yaml来为starter提供配置项,但是当我们在其他项目中使用自定义的starter时,IDE可能没有自动提示可用的yaml配置,这是一种很烦人的情况。这篇攻略将会解决这个问题。
解决方法:
在自定义starter的jar包中添加以下两个文件:
-
META-INF/spring-configuration-metadata.json,用来自动生成yaml配置选项的元数据。
-
META-INF/spring.factories,用来指定spring-boot-configuration-processor支持自定义starter的元数据。
具体步骤:
1.在starter项目中,添加如下代码依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
2.在starter项目的src/main/resources目录下新建spring.factories文件,并添加以下内容:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.demo.MyAutoConfiguration
其中,com.example.demo.MyAutoConfiguration是自定义starter的配置类。
3.为自定义starter的配置类添加@ConfigurationProperties注解和相关属性,例如:
@ConfigurationProperties("my.starter")
public class MyProperties {
private String name;
private Integer age;
// Getters and setters
}
4.在自定义starter的src/main/resources目录下新建META-INF目录,并在其中创建spring-configuration-metadata.json文件,用来描述自定义配置类的yaml选项。例如:
{
"properties": {
"my.starter.name": {
"type": "string",
"description": "Name of the person."
},
"my.starter.age": {
"type": "integer",
"description": "Age of the person."
}
}
}
在上面的例子中,my.starter是配置类使用@ConfigurationProperties注解指定的前缀。
5.通过Maven构建自定义starter项目,将它发布到本地/远程仓库或直接引用它。
6.在其他项目中添加自定义starter的依赖,并在application.yaml中使用自定义starter的配置选项,例如:
my:
starter:
name: "John"
age: 18
7.重启IDE,配置项将会被正确提示,并且提供了自定义starter的属性和描述。
示例说明:
以上的解决方案,我们可以通过Spring官方提供的Initializr创建一个SpringBoot项目,并为它添加一个自定义starter模块进行演示。
第一个示例使用简单的String类型配置项。
1.新建一个SpringBoot工程,并在它的pom.xml文件中添加自定义starter的依赖:
<dependency>
<groupId>com.example</groupId>
<artifactId>demo-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
2.在工程的application.yaml文件中添加自定义starter的配置项:
my:
starter:
name: "John"
3.我们可以看到,在使用application.yaml文件中自定义starter配置的时候,相关配置项会被提供自动提示。
第二个示例使用自定义的对象类型配置项:
1.在自定义starter的配置类中添加对象类型的配置:
@ConfigurationProperties("my.starter")
public class MyProperties {
private Person person;
// Getters and setters
}
其中Person是一个普通的Java对象,例如:
public class Person {
private String name;
private Integer age;
// Getters and setters
}
2.在自定义starter的src/main/resources/META-INF/spring-configuration-metadata.json文件中添加对象类型配置项的描述:
{
"properties": {
"my.starter.person": {
"type": "object",
"description": "My starter person.",
"properties": {
"name": {
"type": "string",
"description": "Name of the person."
},
"age": {
"type": "integer",
"description": "Age of the person."
}
}
}
}
}
3.在SpringBoot项目中添加自定义starter的依赖,并在application.yaml中添加对象类型的配置项:
my:
starter:
person:
name: "John"
age: 18
4.和前面的示例一样,在application.yaml文件中使用自定义starter配置的时候,相关配置项会被提供自动提示。
以上就是关于“SpringBoot 自定义starter yaml提示失效问题及解决方法”的攻略。通过上面的过程,大家可以再次体验到SpringBoot框架的强大之处,也为我们解决了一个重要问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 自定义starter yaml提示失效问题及解决方法 - Python技术站