SpringBoot框架

简介: SpringBoot简化Spring开发,核心功能包括starter起步依赖、自动配置及内嵌服务器支持。通过@SpringBootApplication实现自动化配置,支持多种配置方式,优先级为:命令行参数 > 系统属性 > properties > yml/yaml。可自定义starter实现模块化集成。

第七章 SpringBoot框架
聊聊你对SpringBoot框架的理解 ?
SpringBoot是现在Spring家族最为流行的子项目,因为采用原始的SpringFramework框架开发项目,配置起来非常的繁琐,所以在Spring的4.0版本之后,Spring家族推出了SpringBoot框架,而Springboot就是来解决Spring框架开发繁琐的问题的,是用来简化spring框架开发的。
主要提供了这么三大块功能:

starter起步依赖。springboot提供了各种各样的starter,在starter起步依赖中,就封装了常用的依赖配置,大大简化了项目引入依赖坐标的复杂度。

自动配置。 这也是springboot中最核心的功能,springboot可以根据特定的条件(当前环境是否引入对应的依赖、配置文件中是否有某个配置项、当前环境是否已经有了某个bean)来创建对象的bean,从而完成bean的自动配置。

jar包方式运行。 springboot中内嵌了web服务器,所以我们开发的web项目,也可以直接打成一个jar包,直接基于java -jar 执行运行,非常的方便。
当然,这些呢,只是Springboot中提供的核心功能,还有其他的一些小功能,都是非常实用的 。
SpringBoot框架常见的starter你都用过哪些 ?

spring-boot-starter-web (嵌入tomcat和web开发需要servlet与jsp支持)

spring-boot-starter-aop (aop开发支持)

spring-boot-starter-data-redis (redis支持)

spring-boot-starter-data-elasticsearch (es支持)

spring-boot-starter-amqp(消息队列支持)

spring-boot-starter-data-mongodb (mongodb的支持)

mybatis-plus-boot-starter(mybatis plus的支持)

mybatis-spring-boot-starter(mybatis的支持)
那这些个starter,其实分为两类,一类是springboot官方提供的,命名都是:spring-boot-starter-xxxx;另一类是第三方框架提供的,命名都是:xxxx-spring-boot-starter。
Spring Boot配置的优先级?
SpringBoot项目中,可以在很多地方来配置项目中的配置项,那这里我主要说两个方面:一个是配置文件,一个是外部配置。

在springboot项目中,支持三类配置文件,分别是:application.properties、application.yml、application.yaml。 而这三类配置文件的优先级最高的是 application.properties,其次是 application.yml,最后是 application.yaml。

而外部配置呢,常用的有两种配置形式,一种是java系统属性,比如:-Dserver.port=9001;另一种是命令行参数,比如:--server.port=10010。而命令行参数的优先级要高于java系统属性。

而整体上,外部配置的优先级要高于项目内部的配置文件中的配置,所以整体来说配置文件的优先级由高到低的顺序为:

命令行参数 > java系统属性 > application.properties > application.yml > application.yaml
SpringBoot自动配置的原理是什么?
嗯,好的,它是这样的。
其实SpringBoot自动配置的核心,是引导类上加的注解@SpringBootApplication 底层封装的一个注解,叫@EnableAutoConfiguration,这个注解才是实现自动化配置的核心注解。
该注解通过@Import注解导入对应的配置选择器,导入了一个ImportSelector接口的实现类。 而在这个类的内部呢,读取了该项目和该项目引用的Jar包中的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。
在这些配置类中所定义的Bean,会根据条件注解@Condition系列注解所指定的条件来决定是否需要将其导入到Spring容器中。
一般条件判断会有像@ConditionalOnClass这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。
但是这里要说明一点哈,就是刚才提到的系统配置类声明的配置文件 META-INF/spring.factories, 在springboot3.0版本之后,就已经废除了,不会在这个文件中配置自动配置类了,替换成了一份新的配置文件,配置文件名比较长,记不住,后缀名为:XXxxxSpringAutoConfiguration.imports。
SpringBoot中如何自定义starter?
嗯,这个我知道,之前在项目中,我们封装过的,像阿里云OSS操作的starter。

首先,先说模块哈,自定义starter,我们通常会定义两个maven模块。

一个是:xxx-spring-boot-starter ,这个模块主要负责管理依赖,最后项目中引入的就是这个模块。

另一个是:xxx-spring-boot-autoconfigure,这个模块负责自动配置功能,所有的自动配置的核心代码,都定义在这个模块中。并在在starter模块中,还要引入autoconfigure这个模块的依赖。

然后再来说核心的autoconfigure模块的实现。

第一步呢,就是要根据具体的需求,编写自动配置类。 基于@Configuration注解定义配置类,然后使用@Bean注解来声明bean,可以通过@Conditional系列的注解,根据条件决定是否声明这个bean。

第二步,就是需要在META-INF/spring.factories配置文件中,根据规则配置自动配置类的全类名。 如果是SpringBoot3.x版本,则需要在新的配置文件,META-INF/spring/xxxx.SpringAutoConfiguration.imports文件中配置自动配置类的全类名。
基本上,就这么两块儿。定义好了之后,在各个项目中,就可以引入对应的starter直接使用了。
若有收获,就点个赞吧

相关文章
|
2月前
|
消息中间件 监控 Kubernetes
别再乱排查了!Kafka 消息积压、重复、丢失,根源基本都是 Rebalance!
大家好,我是小富~分享一次Kafka消息积压排查经历:消费者组因Rebalance导致消费能力骤降。本文详解Rebalance触发场景(消费者变更、分区扩容、订阅变化、超时等),剖析其引发的消息积压、重复消费、丢失等问题根源,并提供优化方案:调优超时参数、手动提交offset、启用粘性分配策略、保障消费幂等性。掌握这些,轻松应对Kafka常见故障!
505 0
|
1天前
|
存储 Serverless
哈希冲突
哈希冲突可通过优化哈希函数或采用冲突解决策略应对。开放寻址法通过线性、二次探查或双散列寻找空位,但易导致聚集,影响效率;链表法则在冲突位置构建链表,避免抢占,更适应动态数据,是常用方案之一。
|
1天前
|
NoSQL 索引
SSTable 的分层管理设计
SSTable分层管理通过将文件按层级组织,逐层合并,控制每层容量上限,减少多路归并规模,避免全量重叠,提升查询效率与系统性能,是LevelDB高效读写的核心设计。
|
1天前
|
存储 自然语言处理 分布式计算
索引构建
搜索引擎如何为万亿网页构建索引?通过分治与多路归并,将文档拆分为小集合,在内存中生成倒排索引后写入磁盘,再合并多个有序临时文件,最终生成全局倒排文件。词典可加载至内存或用B+树管理,实现高效检索。该过程类似MapReduce,支持分布式扩展。
|
1天前
|
存储 负载均衡 搜索推荐
大规模检索系统
本讲介绍大规模检索系统如何通过分布式技术加速检索。通过索引拆分,将倒排索引分散到多台服务器内存中,减少单机数据规模和磁盘访问,从而提升单次查询效率。结合分发服务器与负载均衡,实现高吞吐、低延迟的分布式检索架构。
|
1天前
|
存储 搜索推荐 索引
跳表法加速倒排索引
跳表、哈希表与位图法可加速倒排索引。跳表通过多层链表实现快速跳转,将归并查找时间降至O(log n);哈希表适用于小集合查大集合,查询可达O(1);位图则利用位运算高效求交集,适合短posting list场景,显著提升检索效率。
|
1天前
|
存储 缓存 NoSQL
查找对应的 SSTable 文件
通过分层结构与二分查找快速定位SSTable,结合BloomFilter过滤和索引区加速查询。利用table cache与block cache缓存机制,减少磁盘IO,提升检索效率。整个过程高效有序,适用于大规模数据检索场景。(238字)
|
1天前
|
自然语言处理 搜索推荐 UED
最近邻检索(上
在搜索引擎与推荐系统中,相似文章去重至关重要。本文介绍基于向量空间模型的近邻检索方法,将文档表示为TF-IDF加权的高维向量,通过计算向量间相似度识别重复内容。为提升检索效率,引入局部敏感哈希(LSH)技术,快速筛选潜在相似文章,有效优化用户体验。
|
1天前
|
存储 NoSQL 关系型数据库
Geohash 编码
Geohash编码将经纬度转换为字符串,通过不断二分地球经纬度区间,交叉组合生成区域编码,再转为Base32简化表示。它用于高效存储和查询地理位置,广泛应用于Redis、MySQL等系统,具有相同前缀的编码代表相近区域,便于空间索引与检索。
|
1天前
|
算法 搜索推荐 UED
精准 Top K 检索
本文介绍搜索引擎中Top K检索的打分排序机制,重点解析TF-IDF与BM25算法。TF-IDF通过词频与逆文档频率衡量词语重要性,而BM25在此基础上引入非线性增长与文档长度归一化,提升排序准确性,是现代搜索系统的核心技术之一。(238字)