查看: 198|回复: 0

为什么说 Java 程序员到了必须掌握 Spring Boot 的时候?

[复制链接]

该用户从未签到

发表于 2019-11-7 18:49:20 | 显示全部楼层 |阅读模式
Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到各人对学习 Spring Boot 的热情,那么在这么多人热衷于学习 Spring Boot 之时,我自己也在思索: Spring Boot 诞生的背景是什么?Spring 企业又是基于什么样的考虑创建 Spring Boot? 传统企业利用 Spring Boot 会给我们带来什么样变革?
带着这些问题,我们一起来了解下 Spring Boot 到底是什么?
Spring 汗青

说起 Spring Boot 我们不得不先了解一下 Spring 这个企业,不但因为 Spring Boot 来源于 Spirng 各人族,而且 Spring Boot 的诞生和 Sping 框架的发展息息相关。
时间回到2002年,当时正是 Java EE 和 EJB 大行其道的时候,很多知名公司都是接纳此技术方案进行项目开发。这时候有一个美国的小伙子认为 EJB 太过臃肿,并不是所有的项目都需要利用 EJB 这种大型框架,应该会有一种更好的方案来办理这个问题。
为了证明他的想法是正确的,于2002年10月甚至写了一本书《 Expert One-on-One J2EE 》,介绍了当时 Java 企业应用程序开发的情况,并指出了 Java EE 和 EJB 组件框架中存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的办理方案。
在书中,他展示了怎样在倒霉用 EJB 的情况下构建高质量,可扩展的在线座位预留体系。为了构建应用程序,他编写了超过 30,000 行的基础结构代码,项目中的根包定名为 com.interface21,所以人们最初称这套开源框架为 interface21,也就是 Spring 的前身。
他是谁呢,他就是大名鼎鼎的 Rod Johnson (下图), Rod Johnson 在悉尼大学不但获得了计算机学位,同时还获得了音乐学位,更令人吃惊的是在回到软件开发领域之前,他还获得了音乐学的博士学位。现在 Rod Johnson 已经离开了 Spring ,成为了一个天使投资人,同时也是多个公司的董事,早已走上人生顶峰。

在这本书发布后,一对一的 J2EE 计划和开发一炮而红。这本书免费提供的大部分基础架构代码都是高度可重用的。 2003 年 Rod Johnson 和搭档在此框架的基础上开发了一个全新的框架定名为 Spring ,据 Rod Johnson 介绍 Spring 是传统 J2EE 新的开始。随后 Spring 发展进入快车道。

  • 2004 年 03 月,1.0 版发布。
  • 2006 年 10 月,2.0 版发布。
  • 2007 年 11 月更名为 SpringSource,同时发布了 Spring 2.5。
  • 2009 年 12 月,Spring 3.0 发布。
  • 2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0。
  • 2017 年 09 月,Spring 5.0 发布。
Spring Boot 的诞生

随着利用 Spring 进行开发的个人和企业越来越多,Spring 也慢慢从一个单一简便的小框架变成一个大而全的开源软件,Spring 的边界不断的进行扩充,到了后来 Spring 几乎可以做任何事情了,市面上主流的开源软件、中心件都有 Spring 对应组件支持,人们在享用 Spring 的这种便利之后,也遇到了一些问题。
Spring 每集成一个开源软件,就需要增加一些基础设置,慢慢的随着人们开发的项目越来越庞大,往往需要集成很多开源软件,因此后期利用 Spirng 开发大型项目需要引入很多设置文件,太多的设置非常难以理解,并容易设置出错,到了后来人们甚至称 Spring 为设置地狱。
Spring 似乎也意识到了这些问题,急需有这么一套软件可以办理这些问题,这个时候微服务的概念也慢慢鼓起,快速开发微小独立的应用变得更为迫切,Spring 刚好处在这么一个交叉点上,于 2013 年初开始的 Spring Boot 项目的研发,2014年4月,Spring Boot 1.0.0 发布。
Spring Boot 诞生之初,就受到开源社区的持续关注,陆续有一些个人和企业尝试着利用了 Spring Boot,并灵敏喜好上了这款开源软件。直到2016年,在国内 Spring Boot 才被正真利用了起来,期间很多研究 Spring Boot 的开发者在网上写了大量关于 Spring Boot 的文章,同时有一些公司在企业内部进行了小规模的利用,并将利用履历分享了出来。从2016年到2018年,利用 Spring Boot 的企业和个人开发者越来越多,我们从 Spring Boot 关键字百度指数就可以看出。

上图为2014年到2018年 Spring Boot 的百度指数,可以看出 Spring Boot 2.0 的推出引发了搜刮高峰。
当然 Spring Boot 不是为了取代 Spring ,Spring Boot 基于 Spring 开发,是为了让人们更容易的利用 Spring。看到 Spring Boot 的市场反应,Spring 官方也非常重视 Spring Boot 的后续发展,已经将 Spring Boot 作为公司最顶级的项目来推广,放到了官网上第一的位置,因此后续 Spring Boot 的持续发展也被看好。

什么是 Spring Boot

Spring Boot 介绍
Spring Boot 是由 Pivotal 团队提供的全新框架,其计划目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架利用了特定的方式来进行设置,从而使开发人员不再需要定义样板化的设置。用我的话来理解,就是 Spring Boot 其实不是什么新的框架,它默认设置了很多框架的利用方式,就像 maven 整合了所有的 jar 包,Spring Boot 整合了所有的框架(不知道这样比喻是否合适)。
Spring Boot 简化了基于 Spring 的应用开发,通过少量的代码就能创建一个独立的、产品级别的 Spring 应用。 Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置,这样你就可以井井有条地开始。Spring Boot 的核心思想就是约定大于设置,多数 Spring Boot 应用只需要很少的 Spring 设置。接纳 Spring Boot 可以大大的简化你的开发模式,所有你想集成的常用框架,它都有对应的组件支持。
Spring Boot 特性

  • 利用 Spring 项目引导页面可以在几秒构建一个项目
  • 方便对外输出各种情势的服务,如 REST API、WebSocket、Web、Streaming、Tasks
  • 非常简便的安全计谋集成
  • 支持关系数据库和非关系数据库
  • 支持运行期内嵌容器,如 Tomcat、Jetty
  • 强大的开发包,支持热启动
  • 自动管理依赖
  • 自带应用监控
  • 支持各种 IED,如 IntelliJ IDEA 、NetBeans
Spring Boot 这些特性会给我们研发带来非常大的优势,下面我们可以分开来介绍:
利用 Spring Boot 的优势

利用 Spring Boot 开发项目,会给我们带来非常美妙的开发体验,可以从以下几个方面展开来说明
Spring Boot 让开发变得更简单

Spring Boot 对开发效率的提升是全方位的,我们可以简单做一下对比:
在没有利用 Spring Boot 之前我们开发一个 web 项目需要做哪些工作:

  • 1)设置 web.xml,加载 Spring 和 Spring mvc
  • 2)设置数据库连接、设置 Spring 事务
  • 3)设置加载设置文件的读取,开启注解
  • 4)设置日记文件

  • n) 设置完成之后摆设 tomcat 调试
大概你还需要考虑各个版本的兼容性,jar 包冲突的各种可行性。
那么利用 Spring Boot 之后我们需要开发一个 web 项目需要哪些操作呢?
上面的 N 步和下面的2步形成巨大的反差,这仅仅只是在开发环境搭建的这个方面。
Spring Boot 使测试变得更简单

Spring Boot 对测试的支持不可谓不强大,Spring Boot 内置了7种强大的测试框架:

  • JUnit: 一个 Java 语言的单元测试框架
  • Spring Test & Spring Boot Test:为 Spring Boot 应用提供集成测试和工具支持
  • AssertJ:支持流式断言的 Java 测试框架
  • Hamcrest:一个匹配器库
  • Mockito:一个 java mock 框架
  • JSONassert:一个针对 JSON 的断言库
  • JsonPath:JSON XPath 库
我们只需要在项目中引入spring-boot-start-test依赖包,就可以对数据库、Mock、 Web 等各种情况进行测试。
Spring Boot Test 中包含了我们需要利用的各种测试场景,满足我们日常项目的测试需求。
Spring Boot 让设置变得更简单

Spring Boot 让设置变简单,说到这里我们就需要了解一下 Spring Boot 的核心思想:约定优于设置。那么什么是约定优于设置呢?
约定优于设置(convention over configuration),也称作按约定编程,是一种软件计划范式,旨在减少软件开发人员需做决定的数目,获得简单的好处,而又不失灵活性。
本质是说,开发人员仅需规定应用中不符约定的部分。例如,如果模型中有个名为 User 的类,那么数据库中对应的表就会默认定名为 user。只有在偏离这一约定时,例如将该表定名为”user_info”,才需写有关这个名字的设置。
Spring Boot 让摆设变得更简单

说起 Spring Boot 让摆设变简单,就不得不说 Spring Boot 内嵌容器。内嵌容器不只让摆设变得简单,其实在开发调试阶段也会带来非常大的便利性,对比以往开发 Web 项目时设置 Tomcat 的繁琐,会让各人利用 Spring Boot 内嵌容器开发时有更深的感触。利用 Spring Boot 开发 Web 项目,让我们不需要关心容器的环境问题,专心写业务代码即可。
Jenkins 是目前持续构建领域利用最广泛的工具之一,Jenkins 是一个独立的开源自动化服务器,可用于自动化各种任务,如构建,测试和摆设软件。Jenkins 可以通过本机体系包 Docker 安装,甚至可以通过安装 Java Runtime Environment 的任何机器独立运行。
说直白一点 Jenkins 就是专门来负责怎样将代码变成可执行的程序包,将它摆设到目标服务器中,并对其运营状态(日记)进行监控的软件。自动化、性能、打包、摆设、发布、发布结果自动化验证、接口测试、单元测试等等关于我们打包测试摆设的方方面面 Jenkins 都可以很友爱的支持。
利用 Jenkins 摆设 Spring Boot 项目非常简单,各人想继续了解可以参考我的文章:利用Jenkins摆设Spring Boot,只需要前期做一些简单的设置,当我们需要发布项目时只需要点击项目对应的发布按钮,就可以将项目从版本库中拉取、打包、发布到目标服务器中,大大简化了运维后期的摆设工作。
虚拟化技术的发展给我们带来了更多的大概性,我们可以利用容器化技术,将 Spring Boot 项目做成镜像,根据容器集群的计谋来实现弹性扩容、动态摆设等。所以 Spring Boot + Docker + Jenkins 会将 Spring Boot 项目的摆设做得更简单化、智能化。
Spring Boot 让监控变得更简单

可以说 Spring Boot 就是一款自带监控的开源软件,在计划之初就考虑到应用的监控问题,专门提供了一款监控组件来完成这个工作,这个组件就是
Spring Boot Actuator 。
Spring Boot Actuator 是 Spring Boot 提供的对应用体系监控的集乐成能,可以查察应用设置的具体信息,例如自动化设置信息、创建的 Spring beans 以及一些环境属性等。
当然 Spring Boot Actuator 虽然可以监控一个 Spring Boot 应用的康健情况,现实上现在的体系都是需要很多的服务相互共同来完成工作,怎样通过一个监控软件来监控所以的 Spring Boot 项目将变得比力紧迫。
在开源界也有人意识到了这个问题,并且基于 Spring boot actuator 做出了一款强大的监控软件,这个软件就是 Spring Boot admin
Spring Boot Admin 是一个管理和监控 Spring Boot 应用程序的开源软件。每个应用都认为是一个客户端,通过 HTTP 大概利用 Eureka 注册到 admin server 中进行展示,Spring Boot Admin UI 部分利用 AngularJs 将数据展示在前端。
Spring Boot Admin 是一个针对 spring-boot 的 actuator 接口进行UI美化封装的监控工具。他可以:在列表中欣赏所有被监控 spring-boot 项目的根本信息,具体的 Health 信息、内存信息、JVM 信息、垃圾回收信息、各种设置信息(比如数据源、缓存列表和掷中率)等,还可以直接修改logger的level。
利用 Spring Boot Admin 不但可以监控 Spring Boot 项目,还可以监控 Spring Cloud 项目,因此利用了 Spring Boot 项目之后我们监控 Spring Boot 集群效果如下:


简单、直观、易用是它的特点,针对一些特别情况还可以提供报警服务。所以说利用 Spring Boot Actuator 办理了单个 Spring Boot 的监控问题,利用 Spring Boot Admin 就是办理了整个集群监控的问题。
Spring 、Spring Boot 和 Spring Cloud 的关系

Spring 最初最核心的两大核心功能 Spring Ioc 和 Spring Aop 成绩了 Spring,Spring 在这两大核心的功能上埠孟的发展,才有了 Spring 事务、Spirng Mvc 等一系列伟大的产品,终极成绩了 Spring 帝国,到了后期 Spring 几乎可以办理企业开发中的所有问题。
Spring Boot 是在强大的 Spring 帝国生态基础上面发展而来,发明 Spring Boot 不是为了取代 Spring ,是为了让人们更容易的利用 Spring 。所以说没有 Spring 强大的功能和生态,就不会有后期的 Spring Boot 火热, Spring Boot 利用约定优于设置的理念,重新重构了 Spring 的利用,让 Spring 后续的发展更有生命力。
Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性奇妙地简化了分布式体系基础设施的开发,如服务发现注册、设置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和摆设。
Spring 并没有重复制造轮子,它只是将目前各家公司开发的比力成熟、经得起现实考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的设置和实现原理,终极给开发者留出了一套简单易懂、易摆设和易维护的分布式体系开发工具包
根据上面的说明我们可以看出来,Spring Cloud 是为了办理微服务架构中服务治理而提供的一系列功能的开发框架,并且 Spring Cloud 是完全基于 Spring Boot 而开发,Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组件,整体对外提供了一套在微服务架构中服务治理的办理方案。
综上我们可以这样来理解,正是由于 Spring Ioc 和 Spring Aop 两个强大的功能才有了 Spring ,Spring 生态不断的发展才有了 Spring Boot ,利用 Spring Boot 让 Spring 更易用更有生命力,Spring Cloud 是基于 Spring Boot 开发的一套微服务架构下的服务治理方案。
用一组不太合理的包含关系来表达它们之间的关系。
Spring ioc/aop > Spring > Spring Boot > Spring Cloud
给各人推荐一个专门收集 Spring Boot 学习资源的网站:Spring Boot 中文索引
总结

不知道什么时候起,行业里一些开发人员乐意相信,利用复杂的软件就意味着接纳了高深的技术;利用了大量的设置,就意味着软件有着很多比力强大的功能。在产品计划的时候有一个理念就是让产品操作足够的傻瓜化,假设用户是一个智商并不高的群体,却可以使他很容易的学会利用其产品,将此特性做为产品计划的一项尺度之一。
其实我们的开源软件也是一款产品,繁琐并不意味着功能强大,反而有大概是计划不够合理;简便也并不意味着简单,很有大概它只是将众多复杂的功能进行了封装,让我们在利用的时候足够的简单。好的产品如此,好的开源软件也应该如此,Spring Boot 的出现就是让编程变得更简单一些。
在此引用 Python 的经典计划格言,格言来源于 Python 但不限于 Python。
美丽优于貌寝。
清楚优于含糊。
简单优于复杂。
复杂优于繁琐。
平展优于曲折。
宽松优于密集。
重要的是可读性。
特别的案例不敷以特别到破坏规则。
尽管实践可以打破真理。
错误却不可置之不理。
除非另有明白要求。
面临模棱两可,拒绝猜测。
总会有一个 —— 最好是只有一个 —— 显而易见的方式来明辨。
哪怕这种方式在开始的时候大概并不明显。
现在有比没有好。
尽管没有经常好于现在。
如果怎样实现很难被表明清楚,那么这个想法就是一个坏想法。
如果怎样实现可以被很好的表明,那么这是一个好想法。
文章摘录于我在 gitchat 上的分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?用户注册

x

相关技术服务需求,请联系管理员和客服QQ:2753533861或QQ:619920289
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

帖子推荐:
客服咨询

QQ:2753533861

服务时间 9:00-22:00

快速回复 返回顶部 返回列表