Spring Boot指南

欢迎投稿

erixhao作品

Spring Boot是由Pivotal公司(Spring目前隶属于Pivotal)于2014发布的一个框架,如上图官网所示其设计目的是简化新Spring应用搭建及开发过程,尤其大幅减少Spring被誉为诟病的XML配置,并且做到应用立即可运行(just run)同时高效支持Micro Service。

总目录

Spring创始人Rod Johnson

Spring之前世今生

Spring Boot Overview

Quick Start

Spring Boot Application

微服务

Spring Boot Actuator

Deployment

总结

1. Spring创始人 Rod Johnson

提到Spring, 不能不提及缔造者Rod Johnson, 虽然物是人非,Rod早已离开Spring团队。Rod出身于澳大利亚,毕业于悉尼大学计算机科班,同时持有音乐学位。令人惊叹的是,Rod是一名音乐爱好者,为了对音乐的探索和追求,Rod获得了音乐学的博士学位,果然写程序是一门艺术。Rod曾今在保险,金融等领域从事技术顾问,同时积极参与JSR, JCP, JDO规范等,后居住于伦敦。

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的目标:

提供快速开发环境,几乎无XML配置

功能化,或者可称之为“微服务”部署单元

自包含可运行单元,只需 java -jar

自带容器(BYOC, Bring your own container) ,内置tomcat/jetty

对云,PaaS支持

Spring Boot的总体定位:

可以看出Boot希望给开发人员提供更加敏捷方便的基础平台:

应用目标PaaS, 云端

Micro Service 微服务

移动应用服务端

其他JVM语言运行时,如Groovy

上图可以清晰看出,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自动导入

spring-web, spring-webmvc

tomcat-embed-*

jackson

spring-*

好吧,还是把Boot支持的核心Starters列举一下吧,不展开了。

@SpringBootApplication

@SpringBootApplication等价于下面三合一:

@Configuration,@EnableAutoConfiguration,@ComponentScan

SpringApplication.run()执行时, Boot的autoconfigure会监测发现当前应用为Web应用,于是内嵌Tomcat容器并启动Spring上下文,监听8080端口。

配置Servlet默认Context路径

配置servlet-mapping, url-patterns

Scan同名package中@Controller @Service @Component @Repository

有没有发现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

其结果为:

metrics:可配置系统性能参数,如内存,CPU,Java类加载等

http://localhost:8080/metrics

env:访问环境信息

http://localhost:8080/env

当然也可以直接访问某个具体参数信息。

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整合,可集成作为移动应用后端,提供微服务。

本文分享自微信公众号 - java达人(drjava)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-07-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

springboot集成mqtt

MQTT(Message Queuing Telemetry Transport)是基于二进制消息的发布/订阅编程模式的消息协议,非常适合需要低功耗和网络带宽有...

99810
来自专栏Java技术分享圈

Spring - SpringBoot入门之环境搭建

资深Java培训师分享IT行业经验,用自己的见解去一个博客,希望对你们有一分帮助:

12920
来自专栏一个会写诗的程序员的博客

【Spring Boot 实战开发】第1讲 Kotlin 的极简特性之:隐式类型与函数式编程《Spring Boot 2.0极简教程》—— 基于 Gradle + Kotlin 的企业级应用开发最佳实

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。在 Java 开发领域的诸多...

12040
来自专栏dalaoyang

熔断器---Hystrix

Hystrix:熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。 说到熔断器,先要引入另外一个词,雪崩效应...

30860
来自专栏程序员互动联盟

【编程技巧】成为Java技术大牛之25招必杀技

1. 你需要精通面向对象分析与设计(OOA/OOD)、设计模式(GOF,J2EEDP)以及综合模式。你应该了解UML,尤其是class、object、inter...

39660
来自专栏违法举报

有人利用服务器做违法生意

举报域名www.idaikan.com,经过查询,此域名ip119.28.49.236属于腾讯云

3.6K00
来自专栏有刻

Java 小记 — Spring Boot 的实践与思考

38590
来自专栏一个会写诗的程序员的博客

【Spring Boot 实战开发】第2讲 Kotlin类型系统与空安全

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。在 Java 开发领域的诸多...

8730
来自专栏斑斓

大数据流处理平台的技术选型参考

选择太多,是一件好事情,不过也容易乱花渐欲迷人眼。倘若每个平台(技术)都去动手操练一下,似乎又太耗时间。通过阅读一些文档,可以帮我们快速做一次筛选。在将选择范围...

34650
来自专栏不想当开发的产品不是好测试

spring boot 登录注册 demo (四) -- 体验小结

之前没有折腾过Spring,直接上来怼Spring Boot异常痛苦,参考着官网的guide(https://spring.io/guides)写了几个demo...

23890

扫码关注云+社区

领取腾讯云代金券