SpringBoot 介绍
1.简介
SpringBoot最开始基于Spring4.0设计,是由Pivotal公司提供的框架。
SpringBoot发展史:
- 2003年Rod Johnson成立Interface公司,产品是SpringFramework
- 2004年,Spring框架开源,公司改名为Spring Source
- 2008年,收购Apache Servlet、Tomcat,为SpringBoot内嵌Web容器奠定基础,整个生态自己掌握
- 2009年,公司被VMWare以4.6亿美金收购
- 被收购后,Spring公司接连收购了很多优秀的开源中间件,比如RabbitMQ、Redis
- 2013年,VMWare、EMC、通用电气三者联合成立Pivotal公司,从这开始,Spring开始一路暴走
- 2014年,推出SpringBoot1.0,基于Spring4.0开发
- 2015年,推出SpringCloud
- 2018年,Pivotal公司上市
- 2018年3月,SpringBoot2.0发布,基于Spring5.0开发
SpringBoot、SpringCloud都是开源的,那么Pivotal靠什么盈利?
微服务是比较新的技术,传统企业要将业务开发微服务模式,肯定会有许多困难,而Pivotal就是靠提供技术服务支持盈利,全球500强公司有2/3的公司都与Pivotal有合作关系。
SpringBoot继承了Spring框架原有的优秀特性,比如IOC、AOP等,他并不是用来代替Spring的解决方案,而是和Spring框架紧密结合,进一步简化了Spring应用的整个搭建和开发过程。其设计目的是用来简化Spring应用的初始搭建以及开发过程。怎么简化的呢?就是通过提供默认配置方式让我们更容易使用。
再来详细解释一下,如果我们基于SSM框架进行过开发,我们可以理解,Spring在集成SpringMVC、Mybatis时,需要做大量的xml文件配置,在集成其他框架或中间件时,也是同样的道理。而再对比一下SpringBoot开发,我们可以发现,我们只需要引入不同的Starters的maven依赖,就可以开箱即用的进行开发。这就是SpringBoot为我们做的:提供默认的配置方式让我们更容易使用。
下面画图来帮助理解: 这是Spring的模块结构

这是我对SpringBoot的理解

关于SpringBoot有一句很出名的话就是约定大于配置。采用SpringBoot可以大大简化开发模式,他集成了大量常用的第三方库配置,所有你想集成的常用框架,他都有对应的组件支持,例如Redis、MongoDB、Dubbo、Kafka、ES等等。
SpringBoot应用中这些第三方类库几乎可以零配置地开箱即用,大部分的SpringBoot应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
解释:
- 约定大于配置:使用SSM开发模式,Spring如果要集成Redis,就要在xml文件中配置bean,并为bean配置properties。
- 依赖包版本冲突:我们可以直接引入一个指定版本的spring-boot-starter-web的依赖,就可以导入不会冲突的web开发相关的jar包
总结
- 简化Spring应用开发的一个框架;
- 对整个企业级开发技术栈的一个大整合build anything;
- J2EE开发的一站式解决方案;
优点
- 快速构建一个独立的 Spring 应用程序 ;
- 嵌入的 Tomcat 、 Jetty 或者 Undertow,无须部署 WAR 文件;
- 提供starter POMs来简化Maven配置和减少版本冲突所带来的问题;
- 对Spring和第三方库提供默认配置,也可修改默认值,简化框架配置;
- 提供生产就绪型功能,如指标、健康检查和外部配置;
- 无需配置XML,无代码生成,开箱即用;
2.Why SpringBoot
在开始这个阶段的描述前,首先问自己一个问题,假如我原来使用的是SSM的开发模式,虽然SpringBoot确实简化了Spring开发的配置,但我真的会因为这个简化就去使用SpringBoot吗?
我的答案是不会。首先,我已经熟悉了SSM方式开发,更换成SpringBoot开发模式的成本太大。其实,有很多贡献者提供了方便的SSM脚手架,可以开箱即用。而且SSM开发是单体应用,我只需要做一次集成就够了。
所以上面提到的SpringBoot简化了Spring的开发,这只是最直观的一方面,但并能够让SpringBoot变得如此流行,而真正让他变得流行的是微服务开发模式,这也是谈SpringBoot必谈微服务的原因。可以说是Spring Cloud带动了SpringBoot ,SpringBoot成就了SpringCloud。
下面这张图描述了Spring、SpringBoot、SpringCloud之间的关系。

从谷歌关键词搜索中,我们也可以看到SpringBoot和微服务的火热程度是同步的。

微服务
说到微服务,不得不提到应用的架构演变过程。下面以电商为例做一个简要说明。
在传统应用开发中,我们所有的模块都在一个应用中开发与维护,也就是ALL-IN-ONE开发模式。如果是一个电商应用,那么这个应用中会包含用户模块、支付模块、订单模块、商品模块等等。如果用户提升,应用访问量上升,那么会使用负载均衡的架构,如下图:

但随着应用体积增加,访问量增多,单体应用难以维护、单个模块瓶颈等问题暴露了出来。比如随着开发人员增多,几百个人同时维护一个项目,代码的合并、项目的上线就是很大的问题。还有假如在某些活动时期,比如双11,订单模块流量是最多的,而商品、用户模块访问量可能与平时差不太多,那么如果去部署更多的单体应用服务器,会耗费更多的硬件资源,增加成本。因此也就催生出来微服务架构。
下图是微服务架构,从左到右。流量从左边进入,经过一个个节点,可能是订单模块的节点,可能是用户模块的节点,他们之间使用远程调用方式通信。直到最右边两排,最右边是mysql等持久层存储,挡在他前面的是缓存层,比如Redis。

继续说回SpringBoot。随着流量上升,微服务架构势在必行,或者说水平扩展应用势在必行,那么我如果继续以原来的SSM开发模式开发,原来只需要进行一次的Spring集成其他框架我需要集成很多次,那么就远不如SpringBoot更加快速方便,所以说Spring Cloud带动了SpringBoot ,SpringBoot成就了SpringCloud。
相关文章:
SpringBoot 介绍
1.简介 SpringBoot最开始基于Spring4.0设计,是由Pivotal公司提供的框架。 SpringBoot发展史: 2003年Rod Johnson成立Interface公司,产品是SpringFramework2004年,Spring框架开源,公司改名为Spring Source2008年&…...
自动驾驶作业手册
1 总 则 目的为保障港口内自动驾驶车辆安全使用,预防和减少事故,保护人民生命和财产安全,促进港口内业务开展。 含义和范围港口内自动驾驶车辆,是指电脑驾驶车辆,为一种运输动力的无人地面载具,与有人驾驶车辆不同,其具备不需要人类操作即可以感测其环境及导航功能,能…...
MySQL调优笔记——慢SQL优化记录(2)
今天调优的原因是,有一个统计报表业务,查询的时间太慢;同时由于数据库的压力是随机性的,这个业务的执行下限和上限相差近20倍;快的时候可以达到600ms,慢的时候有9秒之多; 接下来详细介绍&#x…...
二叉排序树的插入和删除操作(python实现)
二叉排序树的插入和删除操作都是在保持二叉排序树特性的前提下进行的。 插入操作: 在二叉排序树中插入一个新节点时,先比较新节点的值和当前节点的值的大小关系,若小于当前节点,则继续在当前节点的左子树中查找;若大…...
算法记录 | Day35 贪心算法
860.柠檬水找零 思路: 只需要维护三种金额的数量,5,10和20。 有如下三种情况: 情况一:账单是5,直接收下。情况二:账单是10,消耗一个5,增加一个10情况三:账…...
coinex // 撮合引擎 逻辑流程 (两种数据源 初始化源和前端源)
目录 1 生产者 数据源 1.1. match-server 一启动 初始化数据 自动查询数据库 查询level2要展示的数据 1.2 match-server接收 前端发给Exchange-server的数据 2. 将查询/接受的数据EntrustOrder 转成 Order 解耦 过滤掉不要的属性 3.Order转成 OrderEvent 4. 分配序号发布…...
CentOS7---部署LNMP数据存储到redis
一、部署LNMP及redis 1、部署LNMP,需要将 tengine-2.2.0.tar.gz 拷贝到虚拟机的 /root 目录下 步骤一:安装nginx 源码安装相关软件包 # pcre-devel做正则匹配,zlib-devel做数据压缩 [roottemplate ~]# yum -y install gcc pcre-devel zlib-de…...
Linux中的git命令行
Linux中的git命令行 目录 Linux中的git命令行引入1、Linux下的git工具起源2、gitee的使用.gitignore.git 3、git三板斧3.1 git add3.2 git commit3.3 git push 4、git操作4.1 查看提交日志4.2 查看状态4.3 远端同步4.4 删除文件4.5 修改文件名 引入 当多个开发者同时参与同一个…...
【C++】哈希表:开散列和闭散列
📝 个人主页 :超人不会飞)📑 本文收录专栏:《C的修行之路》💭 如果本文对您有帮助,不妨点赞、收藏、关注支持博主,我们一起进步,共同成长! 目录 前言一、基于哈希表的两个…...
C技能树:Hello World
Hello World 输出 "Hello, World!" 字符串,请选出错误答案。 小知识:Hello World究竟从何而来? Hello, World最早是由 Brian Kernighan 创建的。1978年,Brian Kernighan写了一本名叫《C程序设计语言》的编程书,在程…...
TryHackMe-Set(Windows渗透测试 | WinDefender免杀)
Set 您再次发现自己在Windcorp公司的内部网络上。上次你去那里的味道真好,你回来了 了解更多。 但是,这次他们设法保护了域控制器,因此您需要找到另一台服务器,并在第一次扫描时发现“Set”。 Set被用作开发人员的平台…...
信安大佬真的用kali吗?
Kali只是现在网络安全和kali比较火的一个操作系统 下面我为大家讲讲kali系统都有那些优点 Kali介绍Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。面向专业的渗透测试和安全审计。 集成化:预装超过300个渗透测试工具兼容好&#x…...
禁用表单元素:Layui框架下的实践与技巧
引言 在日常的网页开发过程中,有时我们需要禁用表单元素,以防止用户在某些情况下进行输入或更改。在本文中,我们将介绍如何在Layui框架下使用JavaScript禁用表单元素,例如单选按钮(radio)、下拉列表&#…...
spring boot 访问HTML
HTML整合spring boot 简介默认文件路径访问自定义文件路径访问 或通过Controller控制器层跳转访问 简介 SpringBoot默认的页面映射路径(即模板文件存放的位置)为“classpath:/templates/*.html”。静态文件路径为“classpath:/static/”,其中…...
WPF教程(四)--Dispatcher
一、Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还是WPF应用程序,实际上都是一个进程,一个进程可以包含多个线程,其中有一个是主线程,其余的是…...
ijkplayer 编译增加支持更多的音视频格式
ijkplayer是B站开源的一款基于ffmpeg的移动端播放器。但为了减少播放器的体积,很多音视频的格式播放默认都是不支持的,需要自己下载ijkplayer源码进行编译。这里以mac环境下android为例,简述ijkplayer的编译过程,以及为了支持更多…...
TOP命令显示完整命令行信息
TOP 在Linux系统中,可以使用top命令来查看系统的实时性能数据,包括CPU使用率、内存使用率、进程信息等。以下是top命令的常用选项: -d seconds:指定top命令的刷新时间,单位为秒。 -u username:只显示指定…...
Spring6从入门到精通 第一章 带你玩转Spring
这里写目录标题 一 Spring框架产生的原因二 Spring6配置的关键环节 一 Spring框架产生的原因 传统的JavaWeb存在着耦合度较高的问题,而且实现完整的的MVC三层架构,开发成本过大,因此出现了Spring这个轻量级的开发框架,相当于建筑里…...
Apache POI 实现用Java操作Excel完成读写操作
简介 Apache POI是一个用于操作Microsoft Office格式文件(包括xls、docx、xlsx、pptx等)的Java API库。POI全称为Poor Obfuscation Implementation,是Apache Software Foundation的一个开源项目。它提供了一组Java API,使得Java程…...
改善供应商关系的八种方法
与供应商保持良好关系的重要性有很多原因。最重要的是,它使每个人的日常工作更加愉快。它还可以为你获得更好的交易,有助于协作并增强商誉。 但是,每个供应商都是不同的,建立牢固的关系可能很棘手。本文将解释企业如何建立并操持…...
17 种 RAG 优化策略
RAG 完整解析 本文适合小白入门,全程用「公司员工手册查病假」为统一实例,清晰讲解 RAG 是什么、工作流程,以及 17 种 RAG 优化策略(含标准英文术语),所有内容可直接复制用于分享,实例均精确到具…...
5个核心功能提升音频处理效率:AsrTools语音转文字工具用户指南
5个核心功能提升音频处理效率:AsrTools语音转文字工具用户指南 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into a…...
SPIRAN ART SUMMONER优化指南:如何调整参数让生成的图片更符合预期
SPIRAN ART SUMMONER优化指南:如何调整参数让生成的图片更符合预期 1. 理解SPIRAN ART SUMMONER的核心参数 SPIRAN ART SUMMONER作为一款基于Flux.1-Dev模型的图像生成工具,其参数设置直接影响最终输出效果。与普通AI绘画工具不同,它融入了…...
收藏!小白也能看懂的大模型如何改写工业效率?
收藏!小白也能看懂的大模型如何改写工业效率? 本文介绍了中控技术的TPT大模型在工业生产中的应用,它通过实时监控、自动计算最优参数和风险预警,帮助企业提升效率、降低成本。与互联网领域的AI应用不同,工业AI的价值更…...
通用GUI编程技术——Win32 原生编程实战(十八)——GDI 设备上下文(HDC)完全指南
通用GUI编程技术——Win32 原生编程实战(十八)——GDI 设备上下文(HDC)完全指南 前面一系列文章我们聊了对话框、控件、资源这些内容,我们的窗口已经能够显示各种控件了。但你可能已经发现了一个问题:我们所…...
从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点
从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点 强化学习中的策略优化常常面临一个核心挑战:如何准确评估动作的价值?广义优势估计(GAE)通过巧妙平衡偏差与方差,成为PP…...
语音播报实时
目录 GPT-SoVITS(强烈推荐) Fish Speech-1.5 GPT-SoVITS(强烈推荐) RVC-Boss/GPT-SoVITS: 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) Fish Speech-1.5 追求极致流畅的实时对话&a…...
Lattice FPGA开发实战:Diamond与ModelSim协同仿真环境搭建全攻略
1. 环境准备:软件安装与基础配置 第一次接触Lattice FPGA开发时,最头疼的就是仿真环境的搭建。我清楚地记得去年接手MachXO2项目时,光是让Diamond和ModelSim这两个"老伙计"协同工作就折腾了整整两天。不过别担心,跟着我…...
深度解析 ConcurrentHashMap 1.8:put 与 get 核心流程全解
在 Java 并发编程中,ConcurrentHashMap 是线程安全的高频使用集合,相比线程不安全的 HashMap、效率低下的 HashTable(全锁),JDK 1.8 版本的 ConcurrentHashMap 做了底层结构重构和锁机制优化,成为高并发场景…...
抖音视频批量下载器:如何快速高效地收集和管理海量抖音内容
抖音视频批量下载器:如何快速高效地收集和管理海量抖音内容 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 抖音作为国内最大的短视频平台,每天产生数以百万计的视频内容,…...
