additional-spring-configuration-metadata.json实现springboot自定义提示

devtools/2025/2/28 13:34:43/

       在配置additional-spring-configuration-metadata.json文件后,在开发人员的IDE工具使用个人编写的配置读取很有效的在application.propertiesapplication.yml文件下完成提示。

      配置元数据文件位于jar下面。 META-INF/spring-configuration-metadata.json它们使用简单的JSON格式,其中的项目分类在“groups”或“properties”下,其他值提示分类在“hints”下。

"groups": [{"name": "server","type": "org.springframework.boot.autoconfigure.web.ServerProperties","sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"}...
],"properties": [{"name": "server.port","type": "java.lang.Integer","sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"}...
],"hints": [{"name": "spring.jpa.hibernate.ddl-auto","values": [{"value": "none","description": "Disable DDL handling."},{"value": "validate","description": "Validate the schema, make no changes to the database."}]}
]}

properties表格进行配置上的含义:

名称类型目的
nameString属性的全名。名称采用小写的周期分隔形式(例如server.address)。此属性是强制性的。
type    
 
String 属性的数据类型的完整签名(例如java.lang.String),但也是完整的泛型类型(例如java.util.Map )。您可以使用此属性来指导用户可以输入的值的类型。为了保持一致性,通过使用其包装对应项(例如,boolean变为java.lang.Boolean)来指定基元的类型。请注意,此类可能是一个复杂类型,它从Stringas绑定的值转换而来。如果类型未知,则可以省略。
descriptionString可以向用户显示的组的简短描述。如果没有可用的描述,则可以省略。建议描述为简短段落,第一行提供简明摘要。描述中的最后一行应以句点(.)结尾。
sourceTypeString贡献此属性的源的类名称。例如,如果属性来自带注释的类@ConfigurationProperties,则此属性将包含该类的完全限定名称。如果源类型未知,则可以省略。
defaultValueObject默认值,如果未指定属性,则使用该值。如果属性的类型是数组,则它可以是值数组。如果默认值未知,则可以省略。

groups组比properties多了一个属性 sourceMethod

sourceMethodString获取对象的方法的全名(包括括号和参数类型)(例如,@ConfigurationProperties注释的@Bean方法的名称)。如果源方法未知,则可以省略。

 案例:自定义实现mongodb信息的加载

定义配置类,使用@Component和@ConfigurationProperties注解

@Component
@Getter
@Setter
@ToString
@ConfigurationProperties(prefix = "zhong.data.mongodb")
public class MongoDbProperties {//数据库名称private String database;//用户名private String username;//密码private String password;//地址 host:portprivate String address;//设置你的认证数据库,如果有的话private String authenticationDatabase;private MongoDbFactoryProperties mongoDbFactoryProperties;@Beanpublic MongoDbFactoryProperties getMongoDbFactory(@Autowired MongoDbFactoryProperties mongoDbFactoryProperties){return this.mongoDbFactoryProperties = mongoDbFactoryProperties;}
}

additional-spring-configuration-metadata.json的内容如下:

{"groups": [{"name": "zhong.data.mongodb.database","type": "java.lang.String","description": "mongodb的数据库名称","sourceType": "com.zhong.springdemo.mangodbdome.configure.MongoDbProperties"},{"name": "zhong.data.mongodb.mongoDbFactoryProperties","type": "com.zhong.springdemo.mangodbdome.configure.MongoDbFactoryProperties","description": "线程池配置信息","sourceType": "com.zhong.springdemo.mangodbdome.configure.MongoDbProperties","sourceMethod": "getMongoDbFactory()"}],"properties": [{"name": "zhong.data.mongodb.username","type": "java.lang.String","description": "mongodb的用户名","sourceType": "com.zhong.springdemo.mangodbdome.configure.MongoDbProperties","defaultValue": ""},{"name": "zhong.data.mongodb.password","type": "java.lang.String","description": "mongodb的密码","sourceType": "com.zhong.springdemo.mangodbdome.configure.MongoDbProperties","defaultValue": "123456"},{"name": "zhong.data.mongodb.address","type": "java.lang.String","description": "mongodb的用户名地址","sourceType": "com.zhong.springdemo.mangodbdome.configure.MongoDbProperties","defaultValue": "127.0.0.1:27017"}],"hints": []
}

这样我们在application.proerties或application.yaml时使用了。

       需要注意的是,如果需要将我们自定义的设置加载容器中,则需要保证在程序启动时能扫描到指定的jar包路径。

方法是:在@SpringBootApplication注解中配置scanBasePackages

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class, MongoAutoConfiguration.class,MongoDataAutoConfiguration.class}, scanBasePackages = {"com.zhong.springdemo.mangodbdome"})
@EnableSwagger2Doc
public class WebDemoApplication {public static void main(String[] args){SpringApplication.run(WebDemoApplication.class, args);}
}

参考:

Appendix B. Configuration Metadata

springboot之additional-spring-configuration-metadata.json自定义提示 - Purgeyao - 博客园


http://www.ppmy.cn/devtools/163362.html

相关文章

【洛谷贪心算法题】P2240部分背包问题

【解题思路】 贪心策略选择 对于部分背包问题,关键在于如何选择物品放入背包以达到最大价值。由于物品可以分割,遍历排序后的物品数组,根据物品重量和背包剩余容量的关系,决定是将整个物品放入背包还是分割物品放入背包&#xff…

第六章:性能优化与部署 - 第五节 - Tailwind CSS 性能监控和优化

性能监控和优化是确保 Tailwind CSS 项目高效运行的关键。本节将详细介绍如何实施性能监控和进行相应的优化。 性能指标监控 Web Vitals 监控 // utils/vitals.ts import { getCLS, getFID, getLCP, getTTFB, getFCP } from web-vitals;const reportWebVitals (onPerfEntry…

使用 tcpdump 和 Wireshark 进行网络抓包与分析

在网络故障排除、性能优化和安全审计中,网络抓包是一项非常重要的技能。本文将介绍如何使用 tcpdump 工具捕获网络数据包,并通过 Wireshark 对这些数据包进行详细分析。 1. 使用 tcpdump 捕获网络数据包 安装 tcpdump 大多数 Linux 发行版默认已经安装…

Go Web 项目实战:构建 RESTful API、命令行工具及应用部署

Go Web 项目实战:构建 RESTful API、命令行工具及应用部署 Go 语言因其简洁高效、并发支持强大等特点,已经成为了后端开发的热门选择之一。本篇文章将通过实战案例带领你学习如何使用 Go 构建一个简单的 RESTful API,开发命令行工具&#xf…

自然语言处理算法工程师的技术图谱和学习路径

一、基础阶段:构建核心知识体系 数学与编程基础 数学:线性代数(矩阵运算)、概率论(贝叶斯定理、统计推断)、信息论(熵、交叉熵);编程语言:Python为主,需掌握面向对象编程、数据结构(链表、树、图)与算法(动态规划、贪心算法、排序算法);工具库:NumPy、Pandas用…

【FL0086】基于SSM和微信小程序的垃圾分类小程序

🧑‍💻博主介绍🧑‍💻 全网粉丝10W,CSDN全栈领域优质创作者,博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战,以及程序定制化开发…

Java List实现类面试题

Java List实现类面试题 ArrayList Q1: ArrayList的实现原理是什么&#xff1f; ArrayList是基于数组实现的List&#xff0c;支持动态扩容。 public class ArrayListPrincipleExample {// 模拟ArrayList的基本实现public class SimpleArrayList<E> {private static fi…

VidSketch:具有扩散控制的手绘草图驱动视频生成

浙大提出的VidSketch是第一个能够仅通过任意数量的手绘草图和简单的文本提示来生成高质量视频动画的应用程序。该方法训练是在单个 RTX4090 GPU 上进行的&#xff0c;针对每个动作类别使用一个小型、高质量的数据集。VidSketch方法使所有用户都能使用简洁的文本提示和直观的手绘…