Spring Boot是由Pivotal公司(Spring目前隶属于Pivotal)于2014发布的一个框架,如上图官网所示其java
设计目的是简化新Spring应用搭建及开发过程,尤为大幅减小Spring被誉为诟病的XML配置,而且git
作到应用当即可运行(just run)同时高效支持Micro Service。web
总目录面试
1. Spring创始人 Rod Johnsonspring
提到Spring, 不能不说起缔造者Rod Johnson, 虽然物是人非,Rod早已离开Spring团队。Rod出身于数据库
澳大利亚,毕业于悉尼大学计算机科班,同时持有音乐学位。使人惊叹的是,Rod是一名音乐爱好者后端
,为了对音乐的探索和追求,Rod得到了音乐学的博士学位,果真写程序是一门艺术。Rod曾今在保api
险,金融等领域从事技术顾问,同时积极参与JSR, JCP, JDO规范等,后居住于伦敦。tomcat
Rod于2002推出其大做"Expert one-on-one J2EE Development without EJB"。安全
尚未读过的小伙伴建议精读一下,虽然距今年代久远,但其中不乏J2EE, 架构等经典之做,
更是Spring总体框架的设计之源,包括后续的IOC思想之由来等。Rod随后创办Interface21,
开创Spring框架,而以后的Spring如日中天,无需多言。笔者曾戏称:
"In the real world, J2EE ONLY define Interface, Spring will implement".
而Rod在Java领域的影响已经远远超越了Spring自己的范畴。
2. Spring以前世此生
自Spring于2004年推出后1.0版本后,通过5年的发展,Spring已经在业界大受欢迎,甚者锋
芒盖过了SUN J2EE, 终于在资本运做之下,于2009年被VMware归入旗下。
但自从被VM收购后,受公司文化以及管理方向影响,Spring团队陆续损失了多元大将,包括
Peter Cooper-Ellis, Mark Brewer,还有Shaun Connolly。
而其间,创始人Rod在VM一直担任SVP高级副总裁,直至2012其离职。
若是给咱们一个面试Rod的机会:
面试官:"请问您离职的理由是什么?"
Rod :“VM没有太多机会写代码,甚者脱离Spring, 只能业余项目写代码,学习Scala”.
哈哈,这个可不是做者YY, Rod于2012年正式加入Typesafe Inc.(最近2016.2更名叫Lightbend
Inc.), 注意这家公司但是Martin Odersky创立的,而Martin正是Scala的创始人!这家公司可不可
小嘘
Typesafe专一于提供基于Scala, Akka,Play, Spark的解决方案, 注意Typesafe聘请了Java之父
James Gosling以及咱们前文说起的并行大师Doug Lea担任其技术顾问。
继续回到Spring in VM. 做为VM的母公司(2003年被收购)EMC, 于2013年斥资成立独立实体公司
Pivotal。 Pivotal的定位为下一代云计算与大数据应用公司,而Spring也化为旗下重要应用框架。
EMC/VM的管理层终于也看到了Spring之开源文化与VM, EMC的商业文化之冲突,并明智拆分。
在后Rod时代的Spring, 没有继续关注架构挑战,随着Pivotal公司的定位,转向企业级计算,包括
大数据,NoSQL, HTML5, 移动,社交网络等,而这几年的转型也推出了众多佳做,如Spring Data
(为JPA、Redis、Mongo、Hadoop和GemFire等提供了数据访问), Spring Mobile, Spring Social.
固然Spring也未放弃框架自己演进,会陆续加入异步处理,Java 8整合等。
3. Spring Boot Overview
正式开始Spring Boot.
咱们来看一下官网Spring Boot的目标:
能够看出Boot但愿给开发人员提供更加敏捷方便的基础平台:
上图能够清晰看出,Boot的定位是介于开发人员与Spring现有框架之间的一个助力,加速的位置;
其主要做用是实现了咱们上一段落的快速,现代目标,去/极简XML配置,与第三方库快速集成,
开箱即用(out-of-the-box),如Jackson, JDBC, MongoDB, Redis, Mail等。
4. Quick Start
咱们先看一下官方提供的sample:
当直接以stand-alone来运行程序时, Spring会依据@EnableAutoConfiguration以及pom配置的
spring-boot-starter-web来自动配置启动Tomcat web服务器,
http://localhost:8080
是否有一种清风徐来的清凉与惬意?
可执行JAR
可执行,自包含JAR(fat jars),Java自己并无提供这样一种简单的方案。行内一些开发人员
使用称之为"uber" jars, 即把全部jars的classes从新打包package,显然这样并很差,如:重名类;
以及没法得知某个class属于哪个jar等。
Spring Boot则另辟蹊径,借鉴了WAR的结构,即全部依赖的jars被子包含到一个JAR中。
引入spring-boot-maven-plugin从新打包:
可执行JAR的结构:
可执行WAR的结构:
依赖JAR会放到WEB-INF/lib目录;若是只是内嵌容器须要的JAR则放置到WEB-INF/lib-provided,
如servlet-api.jar
注意,Spring Boot的WAR不须要传统的web.xml配置文件。
5 Spring Boot Application
Starters
Spring Boot提供了Starters做为one-stop-shop,能够方便组织依赖管理Spring的技术平台,提供
了模块化方式导入依赖。如:
上面只是一些例子,官网能够查看全部支持的starter。这些starter提供了模块化导入依赖的管理,
如spring-boot-starter-web, 会包含导入内嵌Tomcat, MVC, RESTFul等依赖;
spring-boot-starter-security则会自动配置Spring Security, 从而为应用提供基本认证及其余安全
特性服务,如CSSP(cross-site scripting protection)跨站点脚本防御。
咱们以spring-boot-starter-web为例,看一下Boot如何模块化管理。先看一下pom配置
只有简单的一句,spring-boot-starter-web, Boot会自动加载全部依赖的JAR, 固然也包括对应
SpringFramework的JAR包,不再须要以前的配置几十个dependency了。
能够看到Boot自动导入
好吧,仍是把Boot支持的核心Starters列举一下吧,不展开了。
@SpringBootApplication
@SpringBootApplication等价于下面三合一:
@Configuration, @EnableAutoConfiguration, @ComponentScan
SpringApplication.run()执行时, Boot的autoconfigure会监测发现当前应用为Web应用,因而内嵌
Tomcat容器并启动Spring上下文,监听8080端口。
有没有发现SpringBoot今后让Web服务编写,调试效率大幅提高。
@Profiles
Spring Profiles提供了方便的对于多个环境变量配置与激活,如: DEV, QA, PROD等, 固然这个
也不是Boot的新功能。
@SpringBootTest
Spring Boot提供了@SpringBootTest方便测试:
JSON测试
Boot提供了@JsonTest来支持JSON测试,如Jackson的Object JSON序列化与反序列化操做。
6 微服务
在企业级基础设施领域,微服务做为一种重要的,流行的应用架构,其优势是能够实现快速开发,
模块化管理,部署,集成;
Spring Boot经过Starters,提供了模块化方式导入依赖,增强了开发RESTful Web服务的功能,
支持可运行JAR,对微服务有着自然的支持与简化。尤为是把各类微服务中的各类企业应用服务快速,
高效整合, 如数据访问服务经过spring-boot-starter-data-jpa整合,经过Repository进行服务
暴露。
7 Spring Boot Actuator
Spring Boot还提供了不少高阶线上JMX功能, 能够用HTTP端口来管理,监控咱们的应用。而且
提供了一些自动监控,健康报表,这个对于运维来讲比较实用。
首先引入actuator:
来看一下有哪些JMX线上功能:
咱们看看几个比较经常使用的:
health : 默认提供了对应用自己,数据库,MongoDB, Redis, MQ的健康监测
http://localhost:8080/health
info:能够自定义以及以"info."开头的配置参数会被暴露
http://localhost:8080/info
其结果为:
dump:/dump执行一个线程的dump
固然,目前经过Actuator所暴露的HTTP服务只能提供只读信息,若是但愿运行时管理,须要经过JMX。
能够经过Spring提供的@ManagedResource @ManagedAttribute @ManagedOperation来建立自定义
MBean, 以后经过相似JConsole链接到应用的JMX服务器,则能够看到管理MBean。
8 Deployment
Cloud Foundry: 做为Pivotal公司本身的开源PaaS云平台,固然要全力支持了。支持stand-alone可执行
JAR, 或者WAR包。
运行结果:
Heroku: Salesforce收购的最先开始云平台之一。部署方法 git push
AWS (Amazon Web Service)
Amazon最著名的Web服务,为亚马逊开辟了云计算新市场。
boxfuse提供了一键式部署Spring Boot到AWS的服务。
整体而言,Spring Boot借鉴了现在如火如荼的PaaS云服务,结合一向简约一致的风格,提供
了具备创新性的无容器/自包含Web应用,同时与云端及PaaS整合,可集成做为移动应用后端,
提供微服务。