• 常用工具类之Spring-boot-configuration-processor的学习使用


    介绍

    在SpringBoot的项目中,往往需要一些配置,但是配置自定义属性时没有代码提示和说明,多有不便,且Idea会对这种配置机型高亮显示,不够美观。我们可以借助spring-boot-configuration-processor自动生成元数据文件来解决上述问题。

    server:
      port: 8080
      #你在idea里面可以点击port,进到这个字段里面,还可以看到配置的提示信息
    test:
      name: haha
      age: 20
      # 自己自定义的就不能点击
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    用法
    自定义配置类

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    配置类开头加上@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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    @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;
     
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    @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();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    使用 @EnableConfigurationProperties 开启 @ConfigurationProperties 注解。
    若是依旧无法自动提示,可以尝试开启IDE的Annonation Processing
    在这里插入图片描述

  • 相关阅读:
    MySQL 23道经典面试吊打面试官
    有手就行5——jenkins项目构建类型(pipeline流水线项目构建推荐)
    Java序列化与JNDI注入
    大模型引领未来:探索其在多个领域的深度应用与无限可能【第二章、金融领域:大模型重塑金融生态】
    ThreadPoolExecutor 线程池参数详解,执行流程
    [V3] Error on build in CI: Cannot find module ‘node:path‘ in vite.config.ts
    【力扣622】二叉树最大宽度
    【web前端期末大作业】html网上在线书城大学生静态网页 大学生html当当书城仿站 网上书城购物网页作业HTML
    java学习day17(Java核心类库)IO流
    10391 - Compound Words (UVA)
  • 原文地址:https://blog.csdn.net/weixin_53998054/article/details/126173330