SpringBoot如何让yml,properties配置⽂件有提⽰
基于jsp的参考文献我们在引⽤spring官⽅start库或者第三⽅start库时,在写配置⽂件时idea总是能精准的提⽰,并且⿏标可以点过去看具体属性或者类,⽽⾃⼰写的配置⽂件idea只会有“Cannot resolve configuration property …”这样的提⽰。
我们现在也去配置我们⾃⼰的配置⽂件让idea知道这些配置⽂件是⼲什么的。
⼀、需要的注解
@ConfigurationProperties 配置属性⽂件,需要指定前缀 prefix
@EnableConfigurationProperties 启⽤配置,需要指定启⽤的配置类
@NestedConfigurationProperty 当⼀个类中引⽤了外部类,需要在该属性上加该注解
⼆、POM依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
三、配置类
@Data
public class School {
private Integer no;
private String name;
private String address;
}
@Data
@ConfigurationProperties(prefix ="jiuxian")
public class JiuxianProperties {
private String name;
private String nameCn;
private String nameEn;
private String[] hobbies;
private SexEnum sexEnum;
private boolean single;
private School school;
private City city;
enum SexEnum {
MAN, WOMAN
}
properties是什么文件@Data
static class City {
private String no;
private String name;
}
}
这个时候@ConfigurationProperties(prefix = “jiuxian”) 注解会报错not registered via @EnableConfigurationProperties or marked as Spring component。这需要加上@EnableConfigurationProperties就可以了
@EnableConfigurationProperties({ JiuxianProperties.class})
@SpringBootApplication
public class SpringbootYmlApplication {
public static void main(String[] args){
SpringApplication.run(SpringbootYmlApplication.class, args);
}
}
四、看效果
然后输⼊ mvn clean package
这个时候properties和yml⽂件已经可以提⽰了,不过有⼀些会有问题,⽐如jiuxian.school,这是⼀个对象,idea并不能解析,⽽因为City 对象是个内部类是可以解析的。
如图:
如何处理呢?
只需要加上 @NestedConfigurationProperty注解即可
@NestedConfigurationProperty
private School school;vb正则不包含某个单词
然后输⼊命令 mvn clean package
警告消失(会有⼀点延迟)
五、为什么
为什么⼀定要打包编译后才可以呢?
看⼀下打包过后的结构,如图:
idea之所以会代码提⽰就是因为这个spring-configuration-metadata.json json⽂件。这个⽂件的⽣成依据的就是我们上⾯的配置。六、进阶配置
如果想在配置⽂件中能够提⽰该字段描述,以及该字段可选参数,是否弃⽤等信息时,需要加额外的
配置
1. 在resources⽬录下新建META-INF⽂件夹,加⼀个additional-spring-configuration-metadata.json 配置⽂件
(1)该配置⽂件的节点信息
groups 有以下属性:
name group的全名,该属性必须
type group数据类型的类名。例如,如果group是基于⼀个被@ConfigurationProperties注解的类,该属性将包含该类的全限定名。如果基于⼀个@Bean⽅法,它将是该⽅法的返回类型。如果该类型未知,则该属性将被忽略
description ⼀个简短的group描述,⽤于展⽰给⽤户,要.点结尾。如果没有可⽤描述,该属性将被忽略
sourceType 来源类名。例如,如果组基于⼀个被@ConfigurationProperties注解的@Bean⽅法,该属性将包含
@Configuration类的全限定名,该类包含此⽅法。如果来源类型未知,则该属性将被忽略
sourceMethod 该组的⽅法的全名(包含括号及参数类型)。例如,被@ConfigurationProperties注解的@Bean⽅法名。如果源⽅法未知,该属性将被忽略
"groups"是⾼级别的节点,它们本⾝不指定⼀个值,但为properties提供⼀个有上下⽂关联的分组。例如,server.port和server.servlet-path属性是server组的⼀部分。
注:不需要每个"property"都有⼀个"group",⼀些属性可以以⾃⼰的形式存在。
properties
name 属性全名,格式为⼩写虚线分割的形式(jiuxian.name-en).必须要有的
type 属性数据类型,java.lang.Boolean。类型未知可忽略
description 该属性的描述
sourceType 来源类型,例如,如果property来⾃⼀个被@ConfigurationProperties注解的类,该属性将包括该类的全限定名。
如果来源类型未知则该属性会被忽略
defaultValue 定义输⼊时的默认值,只是提⽰,并不是真正的默认值,可忽略
deprecated 是否废弃 boolean 值
level 级别 error,warning
reason 废弃原因
replacement 替代属性,为properties 全名
hints 可以给属性提供可选的值,以级描述
name 属性全名,不能为空
values 可选的值
{
"groups": [
{
"name": "jiuxian",
"sourceType": "fig.JiuxianProperties", "type": "fig.JiuxianProperties"
},
{
"name": "jiuxian.school",
"sourceType": "fig.School",
"type": "fig.School",
"sourceMethod": "getSchool()"
}
],
"properties": [
{
"name": "jiuxian.name",
dede免费下载"sourceType": "fig.JiuxianProperties", "type": "java.lang.String",
"deprecation": {
"level": "error",
"reason": "replacement nameCn.",
"replacement": "jiuxian.name-cn"
}
},
{
"name": "jiuxian.name-cn",
"sourceType": "fig.JiuxianProperties", "type": "java.lang.String",
"defaultValue": "jiuxian"
}
],
"hints": [
{
"name": "jiuxian.sex-enum",
"values": [
{
"value": "man",
"description": "man."
},
{
"value": "woman",
"description": "woman."
}
]
},
{
"name": "jiuxian.single",
"values": [
{
"value": true,
"description": "yes."
},
{
"value": false,
unicode数学符号大全"description": "no."
}
]成员函数包括哪些
}
]
}
(2) 如何废弃某个字段,可以⽤代码来注解
@Deprecated
private String name;
@Deprecated
public String getName(){
return getNameCn();
}
@DeprecatedConfigurationProperty(replacement ="jiuxian.name-cn", reason ="replacement nameCn") public void setName(String name){
setNameCn(name);
}
七、更多详细介绍请参阅官⽹
⼋、本⽂⽰例代码
【注】以上代码基于Springboot 2.0
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论