为何说JAVA程序员必须掌握SpringBoot?

原文连接:https://w.url.cn/s/AuDahfb前端

SpringBoot 2.0 的推出又激起了一阵学习 SpringBoot 热,那么, SpringBoot 诞生的背景是什么?Spring 企业又是基于什么样的考虑建立 SpringBoot? 传统企业使用 SpringBoot 会给咱们带来什么样变革?java

带着这些问题,咱们一块儿来了解下 SpringBoot 究竟是什么?web

Spring 历史

提及 SpringBoot 咱们不得不先了解一下 Spring 这个企业,不只由于 SpringBoot 来源于 Spring 你们族,并且 SpringBoot 的诞生和 Sping 框架的发展息息相关。spring

时间回到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 ,成为了一个天使投资人,同时也是多个公司的董事,早已走上人生巅峰。tomcat

在这本书发布后,一对一的 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 发布。服务器

SpringBoot 的诞生

随着使用 Spring 进行开发的我的和企业愈来愈多,Spring 也慢慢从一个单一简洁的小框架变成一个大而全的开源软件,Spring 的边界不断的进行扩充,到了后来 Spring 几乎能够作任何事情了,市面上主流的开源软件、中间件都有 Spring 对应组件支持,人们在享用 Spring 的这种便利以后,也遇到了一些问题。

Spring 每集成一个开源软件,就须要增长一些基础配置,慢慢的随着人们开发的项目愈来愈庞大,每每须要集成不少开源软件,所以后期使用 Spirng 开发大型项目须要引入不少配置文件,太多的配置很是难以理解,并容易配置出错,到了后来人们甚至称 Spring 为配置地狱。

Spring 彷佛也意识到了这些问题,急需有这么一套软件能够解决这些问题,这个时候微服务的概念也慢慢兴起,快速开发微小独立的应用变得更为急迫,Spring 恰好处在这么一个交叉点上,于 2013 年初开始 SpringBoot 项目的研发,2014年4月,SpringBoot 1.0.0 发布。

SpringBoot 诞生之初,就受到开源社区的持续关注,陆续有一些我的和企业尝试着使用了 SpringBoot,并迅速喜欢上了这款开源软件。直到2016年,在国内 SpringBoot 才被正真使用了起来,期间不少研究 SpringBoot 的开发者在网上写了大量关于 SpringBoot 的文章,同时有一些公司在企业内部进行了小规模的使用,并将使用经验分享了出来。从2016年到2018年,使用 SpringBoot 的企业和我的开发者愈来愈多,咱们从 SpringBoot 关键字的百度指数就能够看出。

上图为2014年到2018年 SpringBoot 的百度指数,能够看出 SpringBoot 2.0 的推出引起了搜索高峰。

固然 SpringBoot 不是为了取代 Spring ,SpringBoot 基于 Spring 开发,是为了让人们更容易的使用 Spring。看到 SpringBoot 的市场反应,Spring 官方也很是重视 SpringBoot 的后续发展,已经将 SpringBoot 做为公司最顶级的项目来推广,放到了官网上第一的位置,所以后续 SpringBoot 的持续发展也被看好。

什么是 SpringBoot

SpringBoot 介绍

SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员再也不须要定义样板化的配置。用个人话来理解,就是 SpringBoot 其实不是什么新的框架,它默认配置了不少框架的使用方式,就像 maven 整合了全部的 jar 包,SpringBoot 整合了全部的框架(不知道这样比喻是否合适)。

SpringBoot 简化了基于 Spring 的应用开发,经过少许的代码就能建立一个独立的、产品级别的 Spring 应用。 SpringBoot 为 Spring 平台及第三方库提供开箱即用的设置,这样你就能够有条不紊地开始。SpringBoot 的核心思想就是约定大于配置,多数 SpringBoot 应用只须要不多的 Spring 配置。采用 SpringBoot 能够大大的简化你的开发模式,全部你想集成的经常使用框架,它都有对应的组件支持。

SpringBoot 特性

  • 使用 Spring 项目引导页面能够在几秒构建一个项目
  • 方便对外输出各类形式的服务,如 REST API、WebSocket、Web、Streaming、Tasks
  • 很是简洁的安全策略集成
  • 支持关系数据库和非关系数据库
  • 支持运行期内嵌容器,如 Tomcat、Jetty
  • 强大的开发包,支持热启动
  • 自动管理依赖
  • 自带应用监控
  • 支持各类 IED,如 IntelliJ IDEA 、NetBeans

SpringBoot 这些特性会给咱们研发带来很是大的优点,下面咱们能够分开来介绍:

使用 SpringBoot 的优点

使用 SpringBoot 开发项目,会给咱们带来很是美妙的开发体验,能够从如下几个方面展开来讲明。

  1. SpringBoot 让开发变得更简单
  2. SpringBoot 对开发效率的提高是全方位的,咱们能够简单作一下对比:
    在没有使用 SpringBoot 以前咱们开发一个 web 项目须要作哪些工做:
    -- 1)配置 web.xml,加载 Spring 和 Spring mvc
    -- 2)配置数据库链接、配置 Spring 事务
    -- 3)配置加载配置文件的读取,开启注解
    -- 4)配置日志文件
    -- …
    -- n) 配置完成以后部署 tomcat 调试
    -- 可能你还须要考虑各个版本的兼容性,jar 包冲突的各类可行性。

那么使用 Spring Boot 以后咱们须要开发一个 web 项目须要哪些操做呢?

  1. 登陆网址 http://start.spring.io/ 选择对应的组件直接下载
  2. 导入项目,直接开发

上面的 N 步和下面的2步造成巨大的反差,这仅仅只是在开发环境搭建的这个方面。

Spring Boot 使测试变得更简单

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

  • JUnit: 一个 Java 语言的单元测试框架
  • Spring Test & SpringBoot Test:为 SpringBoot 应用提供集成测试和工具支持
  • AssertJ:支持流式断言的 Java 测试框架
  • Hamcrest:一个匹配器库
  • Mockito:一个 java mock 框架
  • JSONassert:一个针对 JSON 的断言库
  • JsonPath:JSON XPath 库

咱们只须要在项目中引入 spring-boot-start-test 依赖包,就能够对数据库、Mock、Web 等各类状况进行测试。

SpringBoot Test 中包含了咱们须要使用的各类测试场景,知足咱们平常项目的测试需求。

SpringBoot 让配置变得更简单

SpringBoot 让配置变简单,说到这里咱们就须要了解一下 SpringBoot 的核心思想:约定优于配置。那么什么是约定优于配置呢?

约定优于配置(convention over configuration),也称做按约定编程,是一种软件设计范式,旨在减小软件开发人员需作决定的数量,得到简单的好处,而又不失灵活性。

本质是说,开发人员仅需规定应用中不符约定的部分。例如,若是模型中有个名为 User 的类,那么数据库中对应的表就会默认命名为 user。只有在偏离这一约定时,例如将该表命名为“user_info”,才需写有关这个名字的配置。

Spring Boot 让部署变得更简单

提及 SpringBoot 让部署变简单,就不得不说 SpringBoot 内嵌容器。内嵌容器不仅让部署变得简单,其实在开发调试阶段也会带来很是大的便利性,对比以往开发 Web 项目时配置 Tomcat 的繁琐,会让你们使用 SpringBoot 内嵌容器开发时有更深的感触。使用 SpringBoot 开发 Web 项目,让咱们不须要关心容器的环境问题,专心写业务代码便可。

Jenkins 是目前持续构建领域使用最普遍的工具之一,Jenkins 是一个独立的开源自动化服务器,可用于自动化各类任务,如构建,测试和部署软件。Jenkins 能够经过本机系统包 Docker 安装,甚至能够经过安装 Java Runtime Environment 的任何机器独立运行。

说直白一点 Jenkins 就是专门来负责如何将代码变成可执行的程序包,将它部署到目标服务器中,并对其运营状态(日志)进行监控的软件。自动化、性能、打包、部署、发布、发布结果自动化验证、接口测试、单元测试等等关于咱们打包测试部署的方方面面 Jenkins 均可以很友好的支持。

使用 Jenkins 部署 SpringBoot 项目很是简单,只须要前期作一些简单的配置,当咱们须要发布项目时只须要点击项目对应的发布按钮,就能够将项目从版本库中拉取、打包、发布到目标服务器中,大大简化了运维后期的部署工做。

虚拟化技术的发展给咱们带来了更多的可能性,咱们能够利用容器化技术,将 SpringBoot 项目作成镜像,根据容器集群的策略来实现弹性扩容、动态部署等。因此 SpringBoot + Docker + Jenkins 会将 SpringBoot 项目的部署作得更简单化、智能化。

SpringBoot 让监控变得更简单

能够说 SpringBoot 就是一款自带监控的开源软件,在设计之初就考虑到应用的监控问题,专门提供了一款监控组件来完成这个工做,这个组件就是
SpringBoot Actuator 。

SpringBoot Actuator 是 SpringBoot 提供的对应用系统监控的集成功能,能够查看应用配置的详细信息,例如自动化配置信息、建立的 Spring beans 以及一些环境属性等。

固然 SpringBoot Actuator 虽然能够监控一个 SpringBoot 应用的健康状况,实际上如今的系统都是须要不少的服务相互配合来完成工做,如何经过一个监控软件来监控因此的 SpringBoot 项目将变得比较紧迫。

在开源界也有人意识到了这个问题,而且基于 SpringBoot actuator 作出了一款强大的监控软件,这个软件就是 SpringBoot admin 。

SpringBoot Admin 是一个管理和监控 SpringBoot 应用程序的开源软件。每一个应用都认为是一个客户端,经过 HTTP 或者使用 Eureka 注册到 admin server 中进行展现,SpringBoot Admin UI 部分使用 AngularJs 将数据展现在前端。

SpringBoot Admin 是一个针对 spring-boot 的 actuator 接口进行UI美化封装的监控工具。他能够:在列表中浏览全部被监控 spring-boot 项目的基本信息,详细的 Health 信息、内存信息、JVM 信息、垃圾回收信息、各类配置信息(好比数据源、缓存列表和命中率)等,还能够直接修改 logger 的 level 。

使用 SpringBoot Admin 不只能够监控 SpringBoot 项目,还能够监控 Spring Cloud 项目,所以使用了 SpringBoot 项目以后咱们监控 SpringBoot 集群效果以下:

简单、直观、易用是它的特色,针对一些特殊状况还能够提供报警服务。因此说使用 SpringBoot Actuator 解决了单个 SpringBoot 的监控问题,使用 SpringBoot Admin 就是解决了整个集群监控的问题。

Spring 、SpringBoot 和 SpringCloud 的关系

Spring 最初最核心的两大核心功能 Spring IoC 和 Spring AOP 成就了 Spring,Spring 在这两大核心的功能上不断的发展,才有了 Spring 事务、Spring MVC 等一系列伟大的产品,最终成就了 Spring 帝国,到了后期 Spring 几乎能够解决企业开发中的全部问题。

SpringBoot 是在强大的 Spring 帝国生态基础上面发展而来,发明 SpringBoot 不是为了取代 Spring ,是为了让人们更容易的使用 Spring 。因此说没有 Spring 强大的功能和生态,就不会有后期的 SpringBoot 火热,SprinBoot 使用约定优于配置的理念,从新重构了 Spring 的使用,让 Spring 后续的发展更有生命力。

SpringCloud 是一系列框架的有序集合。它利用 SpringBoot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,均可以用 SpringBoot 的开发风格作到一键启动和部署。

Spring 并无重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,经过 SpringBoot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

根据上面的说明咱们能够看出来,SpringCloud 是为了解决微服务架构中服务治理而提供的一系列功能的开发框架,而且 SpringCloud 是彻底基于 SpringBoot 而开发,SpringCloud 利用 SpringBoot 特性整合了开源行业中优秀的组件,总体对外提供了一套在微服务架构中服务治理的解决方案。

综上咱们能够这样来理解,正是因为 Spring IoC 和 Spring AOP 两个强大的功能才有了 Spring ,Spring 生态不断的发展才有了 SpringBoot ,使用 SpringBoot 让 Spring 更易用更有生命力,SpringCloud 是基于 SpringBoot 开发的一套微服务架构下的服务治理方案。

用一组不太合理的包含关系来表达它们之间的关系。

Spring IoC/AOP > Spring > SpringBoot > SpringCloud

总结

  
不知道何时起,行业里一些开发人员愿意相信,使用复杂的软件就意味着采用了高深的技术;使用了大量的配置,就意味着软件有着不少比较强大的功能。在产品设计的时候有一个理念就是让产品操做足够的傻瓜化,假设用户是一个智商并不高的群体,却可使他很容易的学会使用其产品,将此特性作为产品设计的一项标准之一。

其实咱们的开源软件也是一款产品,繁琐并不意味着功能强大,反而有多是设计不够合理;简洁也并不意味着简单,颇有可能它只是将众多复杂的功能进行了封装,让咱们在使用的时候足够的简单。好的产品如此,好的开源软件也应该如此,SpringBoot 的出现就是让编程变得更简单一些。

在此引用 Python 的经典设计格言,格言来源于 Python 但不限于 Python。