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

《零散知识点 · SpringBoot Starter》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗
🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

    • 写在前面的话
    • 正文内容
      • 技术简介
      • 命名补充
      • 利弊分析

CSDN.gif

写在前面的话

此篇博文简单介绍一下 SpringBoot 的 Starter 机制,仅供学习参考。


正文内容

技术简介

Spring Boot 为我们提供了简化企业级开发绝大多数场景的 starter pom,只要引入了相关依赖,就会采用自动配置并提供相关Bean,方便得集成和使用。
例如:Spring官方提供的:spring-boot-starter-web、spring-boot-starter-test。
Spring Boot Starter 也提供了规范可以让开发者提供自己的 starter,开发者通过添加 spring-boot-starter-* 这样的依赖就能支持具体的某个功能,更完整的功能列表可以查看:官网介绍

Tips:若是其他开源项目或公司提供的,是叫 xxx-spring-boot-starter,例如:mybatis-spring-boot-starter,这些还是需要额外一些配置的。


命名补充

spring-boot-starter-*:这是官方定义的starter,其中 *就代表某种场景。
*-spring-boot-starter: 这是规定第三方开发的 starter 的命名。
只要引入starter,这个场景的所有常规需要的依赖我们都自动引入。
所有场景启动器最底层的依赖是:spring-boot-starter

Tips:其实就是基于 Maven 的依赖传递,但是这个思想日常架构设计都需要。


利弊分析

通过对 SpringBoot 的学习,充分体验了自动化配置为我们带来的超便利开发方式,但是,在一些情况下 SpringBoot 的自动化配置也会给我们惹来不少的麻烦。
比如这些场景:项目依赖复杂的情况下,由于依赖方的依赖组织不够严格,可能引入了一些实际我们不需要的依赖,从而导致我们的项目满足一些特定的自动化配置。特别是,传统 Spring 项目转换为 Spring Boot 项目的过程中,由于不同的组织方式问题,引发自动化配置加载的错误,比如:通过xml手工组织的多数据源配置等。上面这些原因都会导致不必要的自动化配置加载而导致应用无法启动或触发/health的健康检查不通过等问题。
其实就是当项目引入一些jar之后,自动会初始化这部分功能,如果你没有相对的配置,可能会报错,这很常见了。
解决办法:
1、通过外部依赖的修改来解决:通过与依赖方沟通,在对方提供的API依赖中去掉不必要的依赖(有时候不切实际);
2、通过禁用指定的自动化配置来避免加载不必要的自动化配置,例如:@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

CSDN_END.gif

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 花几千上万学习Java,真没必要!(三十七)
  • 不得不安利的程序员开发神器,太赞了!!
  • 2、Flink 在 DataStream 和 Table 之间进行转换
  • SQL进阶技巧:用户浏览日志分析【访问量、活跃用户、新增用户、留存用户、流失用户、沉默用户、回流用户】
  • 【初阶数据结构篇】单链表的实现(赋源码)
  • 正在等待缓存锁:无法获得锁 /var/lib/dpkg/lock。锁正由进程 36430(dpkg)持有。遇到这个问题怎么解决
  • ipvlan: operation not supported 导致的POD不断重启
  • 【Spring】——Spring概述、IOC、IOC创建对象的方式、Spring配置、依赖注入(DI)以及自动装配知识
  • 测桃花运(算姻缘)的网站系统源码
  • 全平台|全球最受欢迎的20个黑客工具 小白也可以学会 网络安全必备
  • DjangoRF-10-过滤-django-filter
  • 支付革新:探索WebKit中的Payment Request API
  • 论文写作技巧
  • repo 工具安装和使用教程(windows+gitee)
  • 关于RAG进展|| RankRAG:在大模型中统一检索增强生成的上下文排序
  • [deviceone开发]-do_Webview的基本示例
  • [Vue CLI 3] 配置解析之 css.extract
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • maven工程打包jar以及java jar命令的classpath使用
  • miaov-React 最佳入门
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • python 装饰器(一)
  • python3 使用 asyncio 代替线程
  • react-native 安卓真机环境搭建
  • Ruby 2.x 源代码分析:扩展 概述
  • 当SetTimeout遇到了字符串
  • - 概述 - 《设计模式(极简c++版)》
  • 构建工具 - 收藏集 - 掘金
  • 缓存与缓冲
  • 基于组件的设计工作流与界面抽象
  • 力扣(LeetCode)357
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 浅谈web中前端模板引擎的使用
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 实现菜单下拉伸展折叠效果demo
  • 延迟脚本的方式
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # 消息中间件 RocketMQ 高级功能和源码分析(七)
  • #WEB前端(HTML属性)
  • $.proxy和$.extend
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2.2w字)前端单元测试之Jest详解篇
  • (31)对象的克隆
  • (33)STM32——485实验笔记
  • (4) PIVOT 和 UPIVOT 的使用
  • (Python) SOAP Web Service (HTTP POST)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (三)终结任务
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (幽默漫画)有个程序员老公,是怎样的体验?