• Spring boot starter 如何给配置添加idea 提示功能 spring-boot-configuration-processor


    在这里插入图片描述

    在自己的SpringBoot或者自定义 starter 模块项目中,往往需要一些自定义配置。

    自定义XxlJob Properties 配置

    @Data
    @RefreshScope
    public class CesXxlJobProperties {
    
        public static final String PREFIX = "xxl.job";
    
        @Value("${xxl.job.admin.addresses}")
        private String adminAddresses;
    
        @Value("${xxl.job.accessToken}")
        private String accessToken;
    
        @Value("${xxl.job.executor.appname}")
        private String appName;
    
        @Value("${xxl.job.executor.address:}")
        private String address;
    
        @Value("${xxl.job.executor.ip:}")
        private String ip;
    
        @Value("${xxl.job.executor.port:0}")
        private int port;
    
        @Value("${xxl.job.executor.logpath:}")
        private String logPath;
    
        @Value("${xxl.job.executor.logretentiondays:30}")
        private int logRetentionDays;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    application.yml使用idea往往会提示Springboot自带的配置而不会提示我们自己的配置类。 这个是怎么实现的呢。如下图

    image-20220804155920462

    自定义配置怎么出现提示呢?

    使用spring-boot-configuration-processor实现,其作用是生产配置元数据。

    1. 在resources添加/META-INF/spring-configuration-metadata.json,也可使用additional-spring-configuration-metadata.json

    json文件如下格式:

    {
      "groups": [],
      "hints": [],
      "properties": [
        {
          "name": "xxl.job.admin.addresses",
          "type": "java.lang.String",
          "description": "调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行\"执行器心跳注册\"和\"任务结果回调\";为空则关闭自动注册;"
        },
        {
          "name": "xxl.job.accessToken",
          "type": "java.lang.String",
          "description": "执行器通讯TOKEN [选填]:非空时启用;"
        },
        {
          "name": "xxl.job.executor.appname",
          "type": "java.lang.String",
          "defaultValue": "localhost",
          "description": "执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册"
        },
        {
          "name": "xxl.job.executor.address",
          "type": "java.lang.String",
          "defaultValue": "8080",
          "description": "执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。"
        },
        {
          "name": "xxl.job.executor.ip",
          "type": "java.lang.String",
          "defaultValue": "",
          "description": "执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 \"执行器注册\" 和 \"调度中心请求并触发任务\";"
        },
        {
          "name": "xxl.job.executor.port",
          "type": "java.lang.Integer",
          "defaultValue": "9999",
          "description": "执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;"
        },
        {
          "name": "xxl.job.executor.logpath",
          "type": "java.lang.String",
          "defaultValue": "",
          "description": " 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;"
        },
        {
          "name": "xxl.job.executor.logretentiondays",
          "type": "java.lang.String",
          "defaultValue": "30",
          "description": "执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;"
        }
      ]
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52

    2. 出现的效果如下:

    image-20220804161641867

    自动生成 spring-configuration-metadata

    spring-configuration-metadata.json文件可以自动生成吗?

    答案是肯定的,不然维护这个json文件都会累死人!

    1. 你只需要在你的pom.xml中加入这个依赖:
    
      org.springframework.boot
      spring-boot-configuration-processor
      true
       provided
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    1. 必须要添加 @ConfigurationProperties 注解
    2. 你在写配置属性类的时候,有好好写注释,那么自动提示就都会带上了,比如下面这样:
    @Data
    @RefreshScope
    @ConfigurationProperties(prefix = CesXxlJobProperties.PREFIX)
    public class CesXxlJobProperties {
    
        public static final String PREFIX = "xxl.job";
    
        /**
         * 调度中心部署根地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
         */
        @Value("${admin.addresses}")
        private String adminAddresses;
    
        /**
         * 执行器通讯TOKEN [选填]:非空时启用;
         */
        @Value("${accessToken}")
        private String accessToken;
    
        /**
         * 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
         */
        @Value("${executor.appname}")
        private String appName;
    
        /**
         * 执行器注册 [选填]:优先使用该配置作为注册地址,为空时使用内嵌服务 ”IP:PORT“ 作为注册地址。从而更灵活的支持容器类型执行器动态IP和动态映射端口问题。
         */
        @Value("${executor.address:}")
        private String address;
    
        /**
         * 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
         */
        @Value("${executor.ip:}")
        private String ip;
    
        /**
         * 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
         */
        @Value("${executor.port:0}")
        private int port;
    
        /**
         * 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
         */
        @Value("${executor.logpath:}")
        private String logPath;
    
        /**
         * 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能;
         */
        @Value("${executor.logretentiondays:30}")
        private int logRetentionDays;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    当你再次编译的时候,spring-configuration-metadata.json文件就自动出现啦!不过,这里还有个前提,你在写配置属性类的时候,有好好写注释,那么自动提示就都会带上了,比如下面这样:

    手动添加生成提示

    除了自动生成配置有些我们还有自定义,可以写在additional-spring-configuration-metadata.json 文件中

    additional-spring-configuration-metadata.json 文件中存在的提示会覆盖自动生成的对应属性,若自动生成的没有此属性则自动增加。

  • 相关阅读:
    使用Docker Compose
    OCP Java17 SE Developers 复习题14
    基于 Debian 稳定分支发行版的Zephix 7 发布
    接口测试与功能测试的区别~
    仿大众点评——秒杀系统部分03——RabbitMq措施
    孩子写作业用什么灯光对眼睛好?盘点学习专用的柔光的护眼台灯
    pytorch_trick(4) 模型本地保存与读取方法
    软信天成:如何提高云数据仓库的数据质量?
    2022 CCPC 桂林 (22-10-30) B
    nginx 虚拟主机的配置
  • 原文地址:https://blog.csdn.net/agonie201218/article/details/126162237