Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我我的的博客的访问量大幅增长就能够感觉到你们对学习 Spring Boot 的热情,那么在这么多人热衷于学习 Spring Boot 之时,咱们本身也在思考: Spring Boot 为何带来了这么大的变革。它诞生的背景是什么?Spring 企业又是基于什么样的考虑建立的 Spring Boot? 传统企业使用 Spring Boot 会给咱们带来什么样变化。java
Spring 框架能够说是 Java 开发人员使用的最流行的应用程序开发框架之一。它目前由大量提供一系列服务的模块组成。包括模块容器,为构建横切关注点提供支持的面向切面编程(AOP),安全框架,数据存取框架,Web 应用框架和用于模块测试提供支持的类。Spring 框架的全部组件都经过依赖注入粘在一块儿。依赖注入(也称为控制反转)使设计和测试松散耦合的软件模块变得更容易。程序员
多年来 Spring 框架已变得足够成熟。几乎全部 Java 企业应用须要用到的基础组件均可以在 Spring 框架中找到。但在一个新应用中将全部须要的 Spring 组件整合并配置好并不容易。这包括在 gradle/maven 中设置依赖库,使用 xml、注解或 java 代码配置须要的 Spring Bean。Spring 开发者意识到这里的绝大多数工做是能够能够自动化的,Spring Boot 出现了!web
2002 年 10 月,Rod Johnson 撰写了一本名为 Expert One-on-One J2EE 设计和开发的书。本书由 Wrox出版,介绍了当时 Java 企业应用程序开发的状况,并指出了 Java EE 和 EJB 组件框架中的存在的一些主要缺陷。在这本书中,他提出了一个基于普通 Java 类和依赖注入的更简单的解决方案。redis
在书中,他展现了如何在不使用 EJB 的状况下构建高质量,可扩展的在线座位预留系统。为了构建应用程序,他编写了超过 30,000 行的基础结构代码。包含许多可重用的 Java 接口和类,如 ApplicationContext和BeanFactory。因为java接口是依赖注入的基本构建块,所以他将这些类的根包命名为com.interface21。spring
一对一的 J2EE 设计和开发一炮而红。本书免费提供的大部分基础架构代码都是高度可重用的。即便在 15 年后,本书及其原则仍然与构建高质量的 Java Web 应用程序相关。数据库
在本书发布后不久,开发者 Juergen Hoeller 和 Yann Caroff 说服 Rod Johnson 建立一个基于基础结构代码的开源项目。Rod,Juergen 和 Yann 于 2003 年 2 月左右开始合做开发该项目 。Yann 为新框架创造了“Spring”的名字。据 Rod 介绍,Spring 是传统 J2EE 的新开始。apache
200 年 6 月,Spring 2.0 在 Apache 2.0 许可下发布。2004 年 3 月,1.0 版发布。有趣的是,在1.0发布以前,spring 就被开发人员普遍采用。2004 年 8 月,Rod Johnson,Juergen Hoeller,Keith Donald 和Colin Sampaleanu 共同创立了一家专一于 Spring 咨询,培训和支持的公司 interface21。编程
Yann Caroff 在早期离开了团队,Rod Johnson 在 2012 年离开,Juergen Hoeller 仍然是 Spring 开发团队的积极成员。flask
自 2004 年 1.0 版本发布以来,Spring 框架迅速发展。Spring 2.0 于 2006 年 10 月发布,到那时,Spring的下载量超过了 100 万。Spring 2.0 具备可扩展的 XML 配置功能,用于简化 XML 配置,支持 Java 5,额外的 IoC 容器扩展点,支持动态语言。缓存
在 Rod 领导下管理 Interface21 项目于 2007 年 11 月改名为 SpringSource。同时发布了 Spring 2.5。Spring 2.5 中的主要新功能包括支持 Java 6 / Java EE 5,支持注释配置,classpath 中的组件自动检测和兼容 OSGi 的 bundle。
2007 年,SpringSource 从基准资本得到了 A 轮融资(1000万美圆)。SpringSource 在此期间收购了多家公司,如Hyperic,G2One 等。2009年8月,SpringSource 以 4.2 亿美圆被 VMWare 收购。SpringSource 在几周内收购了云代工厂,这是一家云 PaaS 提供商。2015 年,云代工厂转型成了非营利云代工厂。
2009 年 12 月,Spring 3.0 发布。Spring 3.0 具备许多重要特性,如重组模块系统,支持 Spring 表达式语言,基于 Java 的 bean 配置(JavaConfig),支持嵌入式数据库(如 HSQL,H2 和 Derby),模型验证/ REST 支持和对 Java EE 的支持。
2011 年和 2012 年发布了许多 3.x 系列的小版本。2012 年 7 月,Rod Johnson 离开了团队。2013 年 4月,VMware 和 EMC 经过 GE 投资建立了一家名为 Pivotal 的合资企业。全部的 Spring 应用项目都转移到了 Pivotal。
2013 年 12 月,Pivotal 宣布发布 Spring 框架 4.0。Spring 4.0 是 Spring 框架的一大进步,它包含了对Java 8 的全面支持,更高的第三方库依赖性(groovy 1.8+,ehcache 2.1+,hibernate 3.6+等),Java EE 7 支持,groovy DSL for bean 定义,对 websockets 的支持以及对泛型类型的支持做为注入 bean 的限定符。
2014 年至 2017 年期间发布了许多 Spring 框架 4.xx 系列版本。Spring 4.3.7 于 2017 年 3 月发布。Spring 4.3.8 于 2017 年 4 月发布,并成为 4.x 系列中的最后一个。Spring 框架的下一个延续的主要版本是在 5.0 版本展开。
2012 年 10 月,Mike Youngstrom 在 Spring jira 中建立了一个功能请求 , 要求在 Spring 框架中支持无容器 Web 应用程序体系结构。他谈到了在主容器引导 spring 容器内配置 Web 容器服务。这是 jira 请求的摘录:
我认为 Spring 的 Web 应用体系结构能够大大简化,若是它提供了从上到下利用 Spring 组件和配置模型的工具和参考体系结构。在简单的 main()方法引导的 Spring 容器内嵌入和统一这些经常使用Web 容器服务的配置。
这一要求促使了 2013 年初开始的 Spring Boot 项目的研发。2014 年 4 月,Spring Boot 1.0.0 发布。从那之后,一些 Spring Boot 版本出来了:
Spring boot 1.1(2014 年 6 月) - 改进的模板支持,gemfire 支持,elasticsearch 和 apache solr 的自动配置。
Spring Boot 1.2(2015 年 3 月) - 升级到 servlet 3.1 / tomcat 8 / jetty 9,spring 4.1 升级,支持 banner / jms / SpringBootApplication 注解。
Spring Boot 1.3(2016 年 12 月) - Spring 4.2 升级,新的 spring-boot-devtools,用于缓存技术(ehcache,hazelcast,redis 和 infinispan)的自动配置以及彻底可执行的 jar 支持。
Spring boot 1.4(2017年1月) - spring 4.3 升级,支持 couchbase / neo4j,分析启动失败和RestTemplateBuilder。
Spring boot 1.5(2017年2月) - 支持 kafka / ldap,第三方库升级,弃用 CRaSH 支持和执行器记录器端点以动态修改应用程序日志级别。
Spring boot 2.0(2018 年 03 月)-基于 Java 8,支持 Java 9,支持 Quartz ,调度程序大大简化了安全自动配置,支持嵌入式 Netty
Spring Boot 简单性使 java 开发人员可以快速大规模地采用该项目。Spring Boot 能够说是在 Java 中开发基于 REST 的微服务 Web 应用程序的最快方法之一。。
2014 年 6 月,Spring io 1.0.0 发布。Spring io 表明应用程序库之间的一组预约义的依赖关系。这意味着若是使用特定的 Spring IO 版本建立项目,则再也不须要定义库的版本。即便是 Spring Boot 启动项目也是这个 Spring IO 的一部分。例如,若是你使用的是 spring io 1.0.0,则在添加启动器项目的依赖关系时,不须要指定 spring 启动版本。它会自动假定它是spring boot 1.1.1.RELEASE。
概念上,spring io 由模块的基础层和执行层域特定的运行时(DSR)组成。基础层表明核心弹簧模块和第三方依赖关系的策划清单。Spring Boot 是 Spring IO 提供的执行层 DSR 之一。所以,如今有两种主要的方法来构建应用程序,
使用或不使用 spring io 直接使用 Spring Boot。
使用所需 Spring 模块的 Spring IO。
请注意,一般每当发布新的 Spring 框架版本时,都会触发新的 Spring 启动版本。这将反过来引起新的Spring Boot 版本。
2015 年 11 月,Spring io 2.0.0 发布。这提供了一套更新的依赖项,包括 Spring Boot 1.3。2016 年 7月,Spring io 团队决定使用按字母顺序排版的方案。Spring IO 为此使用城市名称。在字母版本方案中,新名称表示依赖库的次要和主要升级。
2016 年 9 月,雅典发布了首个按字母顺序排列的城市命名的 Spring io 平台版本。它包含 Spring Boot 1.4 和其余第三方库升级。此后,雅典发布了多个服务版本(SR1,SR2,SR3和SR4)。
2017 年 3 月,最新的 Spring io平台(Brussels-SR1)发布。它使用最新的 Spring Boot 版本 1.5.2。下一个 Spring io 平台是开罗计划推出的 spring boot 2.0 和 spring framework 5.0。
微服务技术是程序员绕不开的话题,在这里也顺便给你们推荐一个架构交流学习群:650385180,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,如下的课程体系图也是在群里获取。相信对于已经工做和遇到技术瓶颈的码友,在这个群里必定有你须要的内容。
有人说,Spring Boot的出现,让Java迎来了又一春,它是Java应用开发的颠覆者,完全改变了Java应用开发的模式。
以往咱们作Spring应用开发,要知道配置哪些类来让Hibernate和Spring一块儿工做,要知道如何配置view resolver来控制哪一个模版进行视图层的展现。常常写了一大堆代码以后发现只是在处理Spring框架自己的配置,根本一行业务逻辑都没有写。
开发完成以后,咱们还要考虑部署的问题,且不说部署到很是笨重的应用服务器,好比WebSphere, Weblogic或者JBoss,即便部署到Tomcat或者Jetty这种轻量级容器上面,咱们要知道如何配置容器,如何修改配置文件等等。并且在多应用部署到同一个Tomcat的时候,常常会出现冲突。就算咱们花了很大力气解决了这些问题,程序部署成功以后,咱们很难去了解这个程序的运行状态。有可能咱们要配置不少第三方工具来去知道这个应用程序运行状态如何,有哪些参数,环境变量是什么。尽管Spring帮咱们解决了依赖注入的问题,简化了一些MVC的流程,可是Spring框架自己集成了愈来愈多东西,致使其愈来愈难配置,维护成本成直线上升。
不少时候,Python, Ruby或者JavaScript程序员敲几个命令安装一些库,而后简单的敲几行代码,引入一些框架好比flask,而后直接一个简单的API就能够跑起来了。Java程序员可能还在研究该使用Maven里面的哪一个库,如何在代码里面进行配置。
它使用“习惯优于配置”(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。使用Spring Boot 很容易建立一个独立运行(运行jar,内嵌Servlet 容器)、准生产级别的基于Spring框架的项目,使用Spring Boot 你能够不用或者只须要不多的Spring 配置。
Spring Boot 能够以jar 包的形式独立运行,运行一个Spring Boot 项目只需经过java –jarxx.jar 来运行。
Spring Boot 可选择内嵌Tomcat、Jetty 或者Undertow ,这样咱们无须以war 包形式部署项目。
Spring 提供了一系列的starter pom 来简化Maven 的依赖加载,例如,当你使用了spring-boot-starter-web 时,会自动加入以下图所示的依赖包。
Spring Boot 会根据在类路径中的jar 包、类,为jar 包里的类自动配置Bean,这样会极大地减小咱们要使用的配置。固然,Spring Boot 只是考虑了大多数的开发场景,并非全部的场景,若在实际开发中咱们须要自动配置Bean,而Spring Boot 没有提供支持,则能够自定义自动配置。
Spring Boot 提供基于http、ssh、telnet 对运行时的项目进行监控。
Spring Boot 的神奇的不是借助于代码生成来实现的,而是经过条件注解来实现的,这是Spring 4.x 提供的新特性。
Spring 4.x 提倡使用Java 配置和注解配置组合,而Spring Boot 不须要任何xml 配置便可实现Spring 的全部配置。
SpringBoot 不只让咱们作Java开发变的简单有效,更重要的是SpringBoot完全颠覆了咱们对Java开发的认识,让咱们第一次有了”原来Java开发能够这么作” 的感受。