SpringBoot进阶之道-SpringBoot简介

1,414 阅读12分钟

“大家好,我是草莓君!所谓站得高,尿的远。站在Java巨人的肩膀上,手持SpringBoot暴风大剑,驰骋在召唤师峡谷(编程语言平台)的战场上,你以为你的水晶(python、nodejs、Ruby...)还能挺过20分钟吗?”

Java从诞生之初到现在已经有20多年的历史。在过去一段时间内,java一直饱受质疑,可是它依然牢牢的坐在全球开发者使用量上的第一名。Java能够一步步走向高峰,spring框架起到了浓墨重彩的角色。

spring的发展

Spring 框架最开始的部分是由Rod Johnson于2000年为伦敦金融界提供独立咨询业务时写出来的。在《Expert One-On-One J2EE Development Without EJB》一书中,他进一步拓展了他的代码,以阐述“如何让应用程序能以超出当时大众所惯于接受的易用性和稳定性与J2EE平台上的不同组件合作”的观点。

很难想象Rod Johnson的学历,真的让好多人大吃一惊,他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。不明白那个秃顶的脑袋瓜里怎么会同时拥有如此高深的计算机技术和高雅的艺术细胞,只能惊为神人。秃脑袋瓜并没有让Rod Johnson变得难看,好几个同学一致认为这家伙长得很酷。他看去是一个典型的英国绅士,虽然他好像出生在澳大利亚,但是现在住在伦敦。说起话来也是一板一眼,有条有理。

Spring Framework创始人
在诞生之初,Spring就是为了简化替代日益重量级的企业级Java技术。但随着时间的推移,JavaEE自身也在不断的演化,面向简单JavaBean模型、依赖注入、面向切面也都逐渐融入,这无疑是受到了Spring成功的启发。

在被模仿的同时,Spring并没有停下脚步。它继续在其它领域不断发展:移动开发,社交API集成、安全管理、NoSQL数据库、云计算和大数据等等都是它正在涉足和创新的领域,其前景更加广阔,甚至已经形成与传统的JavaEE平台分庭抗礼之势。

Spring的七个核心模块架构图

Spring版本历史

###spring1.x

2004年3月,Spring1.0正式发布

2003年6月,Spring Framework 第一次以 Apache 2.0 许可证下发布0.9版本,2004年3月,Spring1.0正式发布。 对于Spring1.0,其源码只有一个包,在该包中包含了aop、beans、context、core、jdbc、orm等。对于此时的版本,Spring1.0仅支持XML配置的方式。

spring2.x

2006年10 月,Spring2.0发布。

对于2.0,Spring主要增加了对注解的支持,实现了基于注解的配置。 在2007年11月,发布Spring2.5,该版本具备的特性有:

  • 添加可扩展的XML配置功能,用于简化XML配置
  • 随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。
  • 添加额外的IOC容器扩展点,支持动态语言(如groovy,aop增强功能和新的bean范围 )

spring3.x

2009年12月,Spring3.0发布

Spring3.0主要具有的特性有:

  • 模块重组系统
  • 支持Spring表达式语言(Spring Expression)
  • 基于Java的Bean配置(JavaConfig)
  • 支持嵌入式数据库:HSQL、H2等
  • 支持REST
  • 支持Java6

Spring4.x

2013年12月,发布Spring4.0

对于Spring4.0是Spring版本历史上的一重大升级。其特性为:

  • 全面支持Java8
    • 支持Lambda表达式
    • 支持Java8的时间和日期API
    • 支持重复注解
    • 支持Java8的Optional
  • 核心容器增强
    • 增加泛型依赖注入
    • 增加Map依赖注入
    • 增加List依赖注入
    • 支持lazy注解配置懒加载
    • 支持Condition条件注解
    • CGLIB动态代理增强
  • 支持基于GroovyDSL定义Bean
  • Web增强
    • 增强SpringMVC,基于Servlet3.0开发
    • 提供RestController注解
    • 提供AsyncRestTemplate支持客户端的异步无阻塞请求
    • 增加对WebSocket的支持

Spring5.x

2017 年 09 月,Spring 5.0 发布

  • 升级到Java8、JavaEE7
    • 废弃低版本,将Java8、JavaEE 7作为最低版本要求
    • 兼容Java9
    • 兼容JavaEE8
  • 反应式编程模型,增加WebFlux模块
  • 升级SpringMVC,增加对最新的API(Jackson等)的支持
  • 增加函数式编程模式
  • 重构源码,部分功能使用Lambda表达式实现

Spring框架子项目

对于spring而言,spring框架的生态环境已经非常丰富,下图是spring框架所包含的子项目:

spring框架子项目

springboot的诞生

随着使用 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 关键字的百度指数就可以看出。

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 其实不是什么新的框架,它默认配置了很多框架的使用方式。

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

Spring Boot 的优势

一、Spring Boot 让开发变得更简单

Spring Boot 对开发效率的提升是全方位的,我们可以简单做一下对比:

在没有使用 Spring Boot 之前我们开发一个 web 项目需要做哪些工作:

  • 配置 web.xml,加载 Spring 和 Spring mvc
  • 配置数据库连接、配置 Spring 事务
  • 配置加载配置文件的读取,开启注解
  • 配置日志文件 …
  • 配置完成之后部署 tomcat 调试

可能你还需要考虑各个版本的兼容性,jar 包冲突的各种可行性。

那么使用 Spring Boot 之后我们需要开发一个 web 项目需要哪些操作呢?

  • 登录网址 start.spring.io/ 选择对应的组件直接下载(使用idea工具直接集成,开发起来贼爽)
  • 导入项目,直接开发

上面的 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 项目非常简单,只需要前期做一些简单的配置,当我们需要发布项目时只需要点击项目对应的发布按钮,就可以将项目从版本库中拉取、打包、发布到目标服务器中,大大简化了运维后期的部署工作。

虚拟化技术的发展给我们带来了更多的可能性,我们可以利用容器化技术,将 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 五大特性

  • SpringApplication
  • 自动装配
  • 外部化配置
  • Spring Boot Actuator
  • 嵌入式Web容器

这五大特性构成了 Spring Boot 作为微服务中间件的基础,又提供了SpringCloud的基础设施。

总结

Spring Boot 就是叼!!