在SpringBoot的项目中,往往需要一些配置,但是配置自定义属性时没有代码提示和说明,多有不便,且Idea会对这种配置机型高亮显示,不够美观。我们可以借助spring-boot-configuration-processor自动生成元数据文件来解决上述问题。
server:
port: 8080
#你在idea里面可以点击port,进到这个字段里面,还可以看到配置的提示信息
test:
name: haha
age: 20
# 自己自定义的就不能点击
SpringBoot项目生成的jar包内包含有配置属性详细信息的元数据文件(spring-configuration-metadata.json),这些文件能够为在配置application.yml或者application.properties时提供属性说明、默认值和自动补全。
大多数元数据文件是在编译时通过处理使用@ConfigurationProperties注解注释的类的所有属性自动生成的。与此同时,也可以指定格式手动编写一部分元数据,用于极端情况或者更高级的用法。
使用spring-boot-configuration-processor实现,其作用是生产配置元数据。
spring-boot-configuration-processor其实是一个注解处理器,在编译阶段干活的,一般在maven的声明都是 ,optional 为true。说白了就是给自定义的配置类生成元数据信息的,因为spring也不知道你有哪些配置类,所以搞了这个方便大家自定义
官网介绍如下:https://docs.spring.io/spring-boot/docs/current/reference/html/index.html
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
用法
自定义配置类
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Configuration
@Component
@ConfigurationProperties(prefix = "test.config")
@Setter
@Getter
public class TestConfiguration {
/*
*姓名
*/
private String name;
/*
* 年龄
*/
private String age;
}
配置类开头加上@PropertySource(“”),其余用法与加载yml的配置一样
@Component
@PropertySource(value = {"classpath:static/config/test.properties"},
ignoreResourceNotFound = false, encoding = "UTF-8", name = "test.properties")
public class AuthorTest {
@Value("${author.name}")
private String name;
@Value("${author.age}")
private int age;
}
@PropertySource 中的属性解释
1.value:指明加载配置文件的路径。
2.ignoreResourceNotFound:指定的配置文件不存在是否报错,默认是false。当设置为 true 时,若该文件不存在,程序不会报错。实际项目开发中,最好设置 ignoreResourceNotFound 为 false。
3.encoding:指定读取属性文件所使用的编码,我们通常使用的是UTF-8。
当我们使用 @Value 需要注入的值较多时,代码就会显得冗余,于是 @ConfigurationProperties 登场了
@Component
@ConfigurationProperties(prefix = "author")
@PropertySource(value = {"classpath:static/config/authorSetting.properties"},
ignoreResourceNotFound = false, encoding = "UTF-8", name = "authorSetting.properties")
public class AuthorTest {
private String name;
private int age;
}
@RestController
@EnableConfigurationProperties
public class DemoController {
@Autowired
AuthorTest authorTest;
@RequestMapping("/")
public String index(){
return "author's name is " + authorTest.getName() + ",ahtuor's age is " + authorTest.getAge();
}
}
使用 @EnableConfigurationProperties 开启 @ConfigurationProperties 注解。
若是依旧无法自动提示,可以尝试开启IDE的Annonation Processing