springBoot简介-程序员宅基地

技术标签: java  分布式微服务  后端  

认识一个东西我们先来试着回答三个经典的问题问题,是什么?为什么?怎么样?

一.springBoot是什么?
  在介绍 SpringBoot 之前我们首先来简单介绍一下 Spring。Spring 是诞生于2002年的 Java 开发框架,可以说已经成为 Java 开发的事实标准。所谓事实标准就是虽然 Java 官方没有说它就是开发标准,但是在当前 Java 开发的众多项目中,当我们谈到产品级的 Java 项目的时候,大多都是基于 Spring 或者应用了 Spring 特性的。

  Spring 基于 IOC 和 AOP 两个特性对 Java 开发本身进行了大大的简化。但是一个大型的项目需要集成很多其他组件,比如一个 WEB 项目,至少要集成 MVC 框架、Tomcat 这种 WEB 容器、日志框架、ORM框架,连接数据库要选择连接池吧……使用 Spring 的话每集成一个组件都要去先写它的配置文件,比较繁琐且容易出错。

  然后就有了SpringBoot。

  Spring Boot 是由 Pivotal 团队提供的全新框架,2014 年 4 月发布 Spring Boot 1.0 2018 年 3 月 Spring Boot 2.0发布。它是对spring的进一步封装,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。怎么简化的呢?就是通过封装、抽象、提供默认配置等方式让我们更容易使用。

  SpringBoot 基于 Spring 开发。SpringBoot 本身并不提供 Spring 框架的核心特性以及扩展功能,也就是说,它并不是用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具。

  关于 SpringBoot 有一句很出名的话就是约定大于配置。采用 Spring Boot 可以大大的简化开发模式,它集成了大量常用的第三方库配置,所有你想集成的常用框架,它都有对应的组件支持,例如 Redis、MongoDB、Jpa、kafka,Hakira 等等。SpringBoot 应用中这些第三方库几乎可以零配置地开箱即用,大部分的 SpringBoot 应用都只需要非常少量的配置代码,开发者能够更加专注于业务逻辑。

二.springBoot为什么出现?
为什么会产生 SpringBoot 呢?
  刚才说 SpringBoot 简化了基于 Spring 开发,这只是最直观的一方面,事实上 SpringBoot 的诞生有它所处的大时代背景这个原因在里面的,那就是微服务,这也是谈 SpringBoot 必谈微服务的原因。
  2014年一个叫 Martin Fowler (同时也是经典著作《重构:改善既有代码的设计》一书的作者)发表了一篇关于微服务的博客,比较形象生动地介绍了什么是微服务,然后微服务才慢慢被人所熟知。他说微服务其实是一种架构风格,我们在开发一个应用的时候这个应用应该是由一组小型服务组成,每个小型服务都运行在自己的进程内;小服务之间通过HTTP的方式进行互联互通。和微服务相对应的就是我们之前的,单体应用,就是大名鼎鼎的 all in one 的风格。这种风格把所有的东西都写在一个应用里面,比如我们熟悉的OA,CRM,ERP系统,所有的页面,所有的代码都放在一起,打成打成一个war包,然后把war包放在Tomcat容器中运行。
在这里插入图片描述
  这种传统web开发的架构模式当然也有它的优势,比如它测试部署比较简单,因为不涉及到多个服务的互联互调,只需要把一个包上传到服务器就行了,可以说是一人吃饱全家不饿。同样也不会给运维带来麻烦,方便水平扩展,只需要又把相同的应用复制多份放在不同的服务器中就达到了扩展的目的。

  单体应用的的缺点也显而易见,容易牵一发而动全身,比如要更改一个小小的功能,就可能需要重新部署整个应用。当然,更大的挑战就是日益增长的用户需求。

三.springBoot怎么样
  介绍了一大堆,那 SpringBoot 的开箱即用是怎么体现的呢。

  SpringBoot 官方推荐的构建应用的方式是使用 Spring Initializr,直接在网页上选择好构建工具、语言、SpringBoot 版本,填好自己的项目名和初始依赖,然后点Generate 按钮,就能下载一个构建好的工程的zip包,只需要把这个包解压之后导入IDE就可以了。

  这已经是一个包含依赖的、完整的、可独立运行的springboot应用了!你所需要做的就是往里面填充自己的业务代码!

  当然,如果能直接使用IDE来进行上述操作可以让这个过程变得更顺滑。如果你使用的是 IDEA 商业版的话,新建工程的时候直接有 Spring 的选项;如果是IDEA社区版的话,可以安装 Spring Assistant 这个插件可以实现同样的功能。它们的原理是帮你把连接 Spring Initializr 并下载解压这个过程自动化了,所以只需要保持网络畅通就行了。
在这里插入图片描述
  那如果要用原生的springMVC来实现这个事情就复杂了,可以看看右边我大概罗列的这些步骤,当时学的时候让我我非常头疼。要单独安装Tomcat,安装的过程中要注意版本和当前的spring版本是否兼容,手动引入spring各个模块的依赖。pom.xml就不说了,maven工程都要用到,然后还有web.xml-用来配置servlet、拦截规则、字符编码器等等,applicationContext.xml,springmvc.xml 等一大堆xml文件……

  这个过程对初学者非常不友好,记忆这些步骤和配置文件能让人崩溃,xml这种表达方式又不是很直观。这些东西称为脚手架,在小公司里面会搭建这些东西就可以算半个师傅了,小弟们就可以在搭好的架子里面写业务代码了。

  再聊回微服务,试想一下,如果我们要跟上时代的步伐,使用微服务去开发软件,每个功能模块都部署成一个单独的服务,这个时候我们再使用纯粹的 Spring 去开发,每开发一个服务都需要重复的搭建项目骨架,然后编写各种配置文件,几十几百个服务加起来,这部分工作量是很大的,这还不算业务代码的开发时间。这种时候就是 SpringBoot 发挥它开箱即用的特质的时候了。然后多个微服务之间再通过 Spring 全家桶里面的 SpringCloud 进行管理,比如服务注册、服务发现等等。所以我们现在说 SpringBoot 是 Java 企业级开发的一站式解决方案。

四.总结
  软件工程是一个不断抽象,不断把复杂的东西简化的这样一套理论和工具,不是是说使用起来越复杂就可以彰显我的高端和牛逼,有时候反而是做多错多。所以SpringBoot告诉我们这些工作都没必要,框架来做就行了,你们可以专注于代码逻辑。

SpringBoot 具有如下优点

(1)快速创建独立运行的Spring项目以及与主流框架集成、
(2)使用嵌入式的Servlet容器,应用无需打成WAR包
(3)Starters自动依赖与版本控制
(4)大量的自动配置,简化开发,也可修改默认值
(5)无需配置XML,无代码生成,开箱即用
(6)准生产环境的运行时应用监控
(7)与云计算的天然集成

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42408447/article/details/117295892

智能推荐

关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决_error lnk2005: __xc_z 已经在 msvcrtd.lib(cinitexe.obj-程序员宅基地

文章浏览阅读518次。关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决提示:阅读前需要对静态库(.lib)、动态库(.dll)、导入库(这个还是.lib)之间的区别联系有了解。建议先读读宋宝华先生的《VC++动态链接库(DLL)编程深入浅出 》1.问题引出很久没有写程序设计入门知识的相关文章了,这篇文章要_error lnk2005: __xc_z 已经在 msvcrtd.lib(cinitexe.obj) 中定义

【Boost】boost库asio详解2——strand与io_service区别_strand io-程序员宅基地

文章浏览阅读842次。无论如何使用,都能感觉到使用boost.asio实现服务器,不仅是一件非常轻松的事,而且代码很漂亮,逻辑也相当清晰,这点上很不同于ACE。使用io_service作为处理工作的work pool,可以看到,就是通过io_service.post投递一个Handler到io_service的队列,Handler在这个io_service.run内部得到执行,有可能你会发现,io_services_strand io

autoReg | 自动线性和逻辑回归和生存分析-程序员宅基地

文章浏览阅读2k次。autoReg | 自动线性和逻辑回归和生存分析autoReg可以制作描述性统计汇总表,在各种回归模型中自动选择解释变量。支持线性模型、广义线性模型和环比例风险模型。生成可发表的回归分析结..._autoreg()

内积空间-程序员宅基地

文章浏览阅读1.7k次。转载至:http://blog.sina.com.cn/s/blog_6a2e0c8801015378.html内积空间内积的几何解释在数学上,内积空间是增添了一个额外的结构的矢量空间。这个额外的结构叫做内积或标量积。这个增添的结构将一对矢量与一个纯量连接起来,允许我们严格地谈论矢量的“夹角”和“长度”,并进一步谈论矢量的正交性。内积空间由欧几..._i j单位向量 大气科学

Python模块WSGI详解_python pywsgi.wsgiserver关闭-程序员宅基地

文章浏览阅读8.3k次,点赞2次,收藏7次。WSGI(Web Server Gateway Interface):Web服务网关接口,是Python中定义的服务器程序和应用程序之间的接口。Web程序开发中,一般分为服务器程序和应用程序。服务器程序负责对socket服务的数据进行封装和整理,而应用程序则负责对Web请求进行逻辑处理。Web应用本质上也是一个socket服务器,用户的浏览器就是一个socket客户端。我们先用sock_python pywsgi.wsgiserver关闭

虚拟机安装windows 7黑屏问题-程序员宅基地

文章浏览阅读86次。环境:workstation 10 虚拟机GHOST :windows 7 32位今天安装系统,碰到一些问题。在此记录。问题一是分区后,重启黑屏的问题:解决方案:问题二:点击安装到第一分区,自动跳转到dos工具界面问题。解决方案:...

随便推点

html2canvas 偏移_html2canvas 文字偏下-程序员宅基地

文章浏览阅读4.5k次。生成的海报在有时候会发生偏移,发现是在滚动条不为0的时候就会偏移,所以在生成海报前将滚动条滚动到顶部document.body.scrollTop=document.documentElement.scrollTop=0ps:使用的配置:_html2canvas 文字偏下

JSP实验报告-程序员宅基地

文章浏览阅读5.4k次,点赞3次,收藏3次。_jsp实验报告

dubbo透传traceId链路追踪_@activate(group= {constants.consumer}) traceid-程序员宅基地

文章浏览阅读3.2k次。dubbo透传traceId链路追踪文章简介dubbo的配置,filter的使用,自动透传traceId链路追踪,threadLocal的理解使用,优雅的代码,不乱传参。。。工程结构maven搭建环境:dubbo: 顶级项目,做parentinterface: 提供接口支持,工具支持,filter支持。。。web:消费者service:生产者web和service都依赖inter..._@activate(group= {constants.consumer}) traceid

SonarQube+Jenkins配置使用_withsonarqubeenv-程序员宅基地

文章浏览阅读1.5w次。一、安装插件Manage Jenkins(设置)–>Manage Plugins(插件管理)–>filter(筛选):sonar下载如图中插件二、Jenkins配置1、添加 server authentication token凭据–>添加凭据–>填写token保存2、Manage Jenkins(设置)–>Configure System(系统配置)JK配置参考文章:https://docs.sonarqube.org/latest/analysis/j_withsonarqubeenv

uni-popup弹窗层级问题_ios u-popup层级问题-程序员宅基地

文章浏览阅读3.5k次。uni-popup层级 _ios u-popup层级问题

浅谈 qmake 之 pro、pri、prf、prl文件_zooperwidgetpro官网-程序员宅基地

文章浏览阅读6.4w次,点赞35次,收藏208次。尽管每次和cmake对比起来,我们总是说 qmake 简单、功能少。但是qmake仍然是一个非常复杂的东西,我想大多人应该和我一样吧:不是太清楚CONFIG等变量到底如何起作用的用过的qmake内置变量和函数不超过20个看Qt Creator源码或者QtSolutio_zooperwidgetpro官网

推荐文章

热门文章

相关标签