Spring Boot-简介(译)

译者注:

国内对于Spring Boot的介绍也有不少了.那我为何还要专门再翻译这么一篇文章呢?因为这篇文章中,对于Spring Boot与Spring的关系,描述的比较生动.

几个月之前,我在Barcelona参加了 Spring IO 2015.这里有很多关于Spring生态系统的新东西,比如新版本的Spring, Spring Cloud,微服务架构,WebSockets等.让我最感兴趣的是,几乎所有的演示程序,都是用一种叫做Spring Boot的工具写的.

在Spring Boot出现之前,创建一个基于Spring的应用,对那些刚开始使用Spring的人(即使是Spring老鸟)来说,由于其配置的复杂性,过程是极其痛苦的.现在,使用Spring Boot,我们可以很轻易的就构建一个能够用于生产环境的Spring应用.而这,都是由于Spring Boot约定优先的特性.Spring Boot会自己配置一个Spring应用,然后让我们能够开箱即用.

现在,创建一个Spring应用,你只需要用浏览器打开Spring Boot的初始化器页面,输入项目的元数据,选择项目的依赖,然后点击”Generate Project”.

上面的步骤,会为你生成一个新的项目.你可以将它保存到机器上,然后用你喜欢的IDE打开,构建并运行,而不需要任何配置.如果你在新建项目时,选择的是”Jar”模式,它会在里面自动为你嵌入一个Tomcat,这样,你就可以直接运行了.当然,你也可以选择”War”模式,然后手动将它部署到你喜欢的服务器上.

但是,在Spring IO上,Josh Long建议你最好选择Jar模式,而不是War模式.为什么呢?因为Jar模式让你能够更加方便的构建一个微服务.我们可以想象一下,假如你有50个微服务,每个都需要你手动部署到服务器上.那是有多么麻烦啊!

你也可以使用你最喜欢的IDE来创建应用,如果它集成了Spring Initializer的话.这种IDE有IntelliJ, Eclipse和NetBeans.

除此之外,你还可以使用Spring提供的CLI,从命令行里创建项目.使用这种方式,在创建项目时,可以配置的选项就相对较少了.

必须要说明的是,Spring Boot并不是用于代码生成的.它是用来启动项目的,使用它默认的配置.你可以在属性文件或者类中重写这些属性.Spring Boot完全可以做到无需XML来进行配置,当然,如果你喜欢用的话,还是可以用的.

前些日子,我看到Phil Webb发了一篇博文,说Spring Boot是一个封装了Spring的框架(这个观点实际上是对的).同时,他还发了几张图片,用来解释Spring Boot的核心概念非常好:

我觉得这个比喻特别恰当.当使用Spring框架时,你有很多配料,来自己做一个好吃的蛋糕(或者Spring应用).但是,当使用Spring Boot时,实际上是已经根据你选的配料给你生成了一个蛋糕.如果你想改变这个蛋糕的口味,颜色和形状,做就是,Spring Boot将会给你一个新的蛋糕.

Spring Boot的自动配置,是通过starters和conditional annotations实现的.

Starter把一堆相关依赖给封装成了一个,然后我们在项目中只需要导入这一个starter就行,而不需要像以前那样,导入很多依赖.这让我们简化了我们的依赖配置文件.例如,如果你想要创建一个web应用,现在你只需要在pom.xml文件中,添加这个starter即可:


这个starter会自动为你添加那些创建一个Spring Web应用需要的依赖.

那Conditional annotations是干嘛的呢?它们会根据classpath中的类的注解,属性文件,来实现自动配置.比如,我们可以通过注解来配置一个beans.用这种方式,Spring Boot能够为我们自动配置一个默认数据库,JMS队列,属性等,而不需要我们明确的进行配置.用于实现这些行为的注解有:

Class conditions: @ConditionalOnClass and @ConditionalOnMissingClass.

Bean conditions: @ConditionalOnBean and @ConditionalOnMissingBean.

Property condition: @ConditionalOnProperty.

Resource condition: @ConditionalOnResource.

Web application conditions: @ConditionalOnWebApplication and @ConditionalOnNotWebApplication.

SpEL expression condition: @ConditionalOnExpression.

将Starter和Conditional annotation组合起来使用,你也可以创建你自己的可以自动配置的start.这种功能在有的情景中很有用.比如,你的公司想要创建共享库或者大量配置基本相同的项目.

你可以从附录上的链接中,看到Spring提供给我们的starters的完整列表,以及如何创建你自己的auto configuration.

Spring Boot不止可以自动配置并启动Spring应用.它还有很多其他的特色.比如,如果你在你的POM文件中添加spring-boot-starter-actuator这个starter,或者在Initializer页面中,选择”Actuator”,你会为你的Spring应用添加几个用于监控的接口.下面是从Spring文档中截取的可用的接口:

/autoconfig: Displays an auto-configuration report showing all auto-configuration candidates and the reason why they ‘were’ or ‘were not’

/beans: Displays a complete list of all the Spring beans in your application.

/configprops: Displays a collated list of all @ConfigurationProperties.

/dump: Performs a thread dump.

/env: Exposes properties from Spring’s ConfigurableEnvironment.

/health: Shows application health information (a simple ‘status’ when accessed over an unauthenticated connection or full message details when authenticated).

/info: Displays arbitrary application info.

/metrics: Shows ‘metrics’ information for the current application.

/mappings: Displays a collated list of all @RequestMapping paths.

/shutdown: Allows the application to be gracefully shutdown (not enabled by default).

/trace: Displays trace information (by default the last few HTTP requests).

这些接口都会返回JSON数据,你可以抓取这些数据,并做一些有用的工作.比如,监控应用.你也可以通过在Spring Boot中集成JMX,来检查这些接口.

监控我们的Spring Boot应用的另一种方式是通过集成一个叫做CRaSH的远程Shell.要在你的应用中集成它,你必须在你的POM文件中,添加spring-boot-starter-remote-shell这个starter.加上这个starter之后,你就可以通过在terminal中输入ssh -p 2000 user@localhost以及在启动应用时在日志中看到的密码来连接到你的应用了:


连接上之后,你就可以输入help来查看所有可以执行的命令.你会看到跟你可以通过命令来查看上面的接口中可以查看的东西.

你也可以通过Groovy或者Java语言来创建命令.更多细节请查看CRaSH文档.

通过上面的介绍,我们可以看到,Spring Boot是一个非常有用的框架,它能让我们迅速的搭建一个生产级的应用,而不需要在复杂的配置上花费很多时间.而且,通过一个starter,我们就能导入之前需要写很多依赖项的一系列相关的依赖.我们还能通过监控应用.Spring Boot让我们能够启动和监控应用!

参考链接

Spring Boot Starters list:

https://github.com/spring-projects/spring-boot/tree/master/spring-boot-starters

Spring Boot Create Own Auto-configuration:

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/html/boot-features-developing-auto-configuration.html

Spring-Boot-Reference-Guide中文版:

https://www.gitbook.com/book/qbgbook/spring-boot-reference-guide-zh/details

使用 Spring Boot 快速构建 Spring 框架应用:

https://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容