介绍

在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

  1. 添加下列依赖
<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

spring boot config 不生效_spring boot