当前位置: 首页 > news >正文

无聊小知识.03 Springboot starter配置自动提示

1、前言

Springboot项目配置properties或yaml文件时候,会有很多spring相关的配置提示。这个是如何实现的?如果我们自己的配置属性,能否也自动提示?

2、Springboot配置自动提示

其实IDE是通过读取配置信息的元数据而实现自动提示的。Springboot的元数据就在目录META-INF下。通过starter部分结构,我们可以看到如下:

其实,springboot自动提示元数据就在META-INF中的spring-configuration-metadata.json或additional-spring-configuration-metadata.json。

打开additional-spring-configuration-metadata.json可以看到json结构:

{"groups": [],"properties": [{"name": "spring.devtools.add-properties","type": "java.lang.Boolean","description": "Whether to enable development property defaults.","defaultValue": true}],"hints": []
}

properties:为设置的提示属性,name为属性名称,type为属性类型,defaultValue为该属性默认值,description为属性描述。

groups:为properties提供了一个有上下文关联的分组。本身并不指定一个值。

hints:为属性设置多个提示值。

具体配置描述详见官网地址:https://docs.spring.io/spring-boot/docs/current/reference/html/configuration-metadata.html

3、手写尝试

1、创建starter工程

创建starter模块工程MySpringbootDemoModule1

2、自动装配

创建属性映射类,DemoProperties:

package org.example;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@EnableConfigurationProperties({DemoProperties.class})
@ConfigurationProperties(prefix = "org.shamee")
public class DemoProperties {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

创建MyAutoConfiguration:

package org.example;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyAutoConfiguration {@Beanpublic DemoProperties demoProperties(){return new DemoProperties();}}

配置spring.factories:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.example.MyAutoConfiguration

到此,一个简单的starter模块就已创建完毕,但是此时,如果直接使用,IDE是无法自动提示的。这里我们期望IDE帮我们自动提示DemoProperties中的两个属性,org.shamee.name和org.shamee.age。

3、创建元数据

那么,我们在resources下创建META-INF/additional-spring-configuration-metadata.json,并给与配置信息。

{"properties": [{"name": "org.shamee.name","type": "java.lang.String","defaultValue": "test"},{"name": "org.shamee.age","type": "java.lang.Integer","defaultValue": 12}]
}

4、安装使用

到此,就已经完成了一个能够让IDE自动帮我们提示的starter依赖。执行mvn install安装。

5、使用

创建一个主工程:MySpringbootDemo

pom.xml添加上述starter依赖。

刷新以来后,尝试application.properties上配置我们自定义的属性。

可以看到,IDE已经自动帮我们提示了属性名称以及默认的值。嗯,爽了。

看下starter依赖结构:

好了,又白嫖了一个无聊的小知识!!!😃😃😃

http://www.lryc.cn/news/27423.html

相关文章:

  • 2023-03-03 mysql-join类别-分析
  • Saleen 系列来袭!
  • 如何优雅地处理Java中的null值?使用Optional类来实现!
  • 巾帼绽芬芳 一起向未来(中篇)
  • espnet training
  • qsort函数的应用以及模拟实现
  • 【iobit 软件】家族系列 - 正版激活码
  • ACM-大一训练第三周(Floyd算法+并查集算法专题训练)
  • taobao.item.sku.update( 更新SKU信息 )
  • ros2创建一个工程
  • 【力扣】stack容器的探索之有效的括号
  • 【Elsevier出版社】中科院2区,SCIEEI 双检,已有发表案例,3个月左右录用
  • 基于明道云平台重建医院管理流程
  • 【蓝桥杯嵌入式】STM32定时器的配置,解析预分频系数和重装载值与时钟频率的关系
  • ChatGPT API 低价上线,开发者可以人手一个了?
  • 品牌营销策略 | 科学经营合作伙伴关系的5个要素
  • 【剑指offer-C++】JZ20:表示数值的字符串
  • 【NLP相关】深度学习领域不同编程IDE对比
  • 定制ubuntu的docker镜像
  • 我的 System Verilog 学习记录(8)
  • 详解JAVA字节码
  • 前端利用emailjs发送邮件
  • 16 Nacos服务端服务注册源码分析
  • Spring Boot2中如何优雅地个性化定制Jackson
  • 2023年全国最新食品安全管理员精选真题及答案11
  • 【脚本】用于得到某个文件/文件夹所有文件的存储大小(MB单位)
  • 19- CNN进行Fashion-MNIST分类 (tensorflow系列) (项目十九)
  • 【正点原子FPGA连载】第二十二章IP封装与接口定义实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 【ElasticSearch8.X】学习笔记(二)
  • Ubuntu22.04安装、配置、美化、软件安装、配置开发环境