笔者最近在学习Spring Boot的参考指南,很兴奋!因为Spring Boot中有太多的亮点值得点赞了,笔者认为,当你从无到有,经历过所有的痛点或迷茫之后,突然有一个“神器”帮你解决了之前的困惑时,你对这个“神器”才会有更深刻的感悟及印象。
Spring Boot简介
简单介绍下Sring Boot:Spring Boot使开发独立的, 产品级别的基于Spring的应用变得非常简单, 你只需"just run"。 我们为Spring平台及第三方库提供开箱即用的设置, 这样你就可以有条不紊地开始。多数Spring Boot应用需要很少的Spring配置。
很明显,Spring Boot可以很方便地帮你构建基于Spring开发的应用!
Spring Boot的主要目标是:
- 为所有的Spring开发提供一个从根本上更快的和广泛使用的入门经验。
- 开箱即用, 但你可以通过不采用默认设置来摆脱这种方式。
- 提供一系列大型项目常用的非功能性特征( 比如, 内嵌服务器, 安全, 指标, 健康检测, 外部化配置) 。
- 绝对不需要代码生成及XML配置。
Spring Boot基于Maven的应用
Spring Boot建议使用JDK1.6或更高的版本,但尽管Spring Boot兼容Java 1.6, 如果可能的话, 你应该考虑使用Java最新版本。指南中建议使用JDK8,可见其前卫性呀。
通常推荐使用者使用一个支持依赖管理的构建工具( 比如Maven或Gradle),Spring Boot对这两种构建工具进行了完美的结合。
由于笔者主要是进行的Web开发,并且使用Maven已久,因此重点记录Spring Boot + Maven的应用。Maven需要3.2或更高的版本。
Spring Boot不会破坏Maven已有的规则,相反Spring Boot会根据Maven的最佳实践,给出更方便的配置与操作。
Maven项目中引入Spring Boot
在pom.xml中添加如下配置即可:
org.springframework.boot spring-boot-starter-parent 1.3.0.BUILD-SNAPSHOT
Spring Boot提供很多"", 这能够让你轻松的将jars添加到你的classpath下。
程序已经在POM的partent节点使用了spring-boot-starter-parent。spring-boot-starter-parent是一个特殊的starter,它提供了有用的Maven默认设置,例如项目默认是基于UTF8的编码,编译环境默认为JDK1.6等等。同时,它也提供了一个dependency-management节点, 这样对于“blessed”依赖你可以省略version标记。
当然你可能并不需要spring-boot-starter-parent,后续会有“Spring Boot without the parent POM”的办法。
当然我需要构建一个Spring MVC项目,单单上面的配置是不够的,还需要另一个“Starter POM”,只需在pom.xml中添加依赖即可:
org.springframework.boot spring-boot-starter-web
这个spring-boot-starter-web会把开发Spring MVC应用所可能用到的依赖自动地帮你加载进来。可以通过mvn dependency:tree命令查看。
添加一个Spring Boot的Maven插件,它可以提供更多的Maven功能。
org.springframework.boot spring-boot-maven-plugin
这个插件既可以使我们应用mvn spring-boot:run命令来运行程序,也可以帮我们二次打包应用为可运行的jar包!Java没有提供任何标准的加载内嵌jar文件(即jar文件中还包含jar文件)的方法,Spring Boot采取一个不同的途径,并允许你真正的内嵌jars。
当然要使用插件二次打包这个特性,需要绑定repackage目标的 <executions> 配置。如果你不使用parent POM, 你将需要自己声明该配置。具体可参见。
最后,如果你使用的Spring Boot不是release版本,可能需要在pom.xml中添加以下配置:
spring-snapshots http://repo.spring.io/snapshot true spring-milestones http://repo.spring.io/milestone spring-snapshots http://repo.spring.io/snapshot spring-milestones http://repo.spring.io/milestone
示例要点
上述的项目pom.xml配置完成后,写一个简单的SpringMVC的示例。
首先建立一个DemoController。
@RestControllerpublic class DemoController { @RequestMapping("/demo") String home() { return "Hello World!"; }}
然后建立一个项目的启动类,同时“兼职”Spring的Java配置类。
@Configuration@EnableAutoConfiguration@ComponentScan public class Application { public static void main(String[] args) throws Exception { SpringApplication.run(Application.class, args); }}
要项目跑起来有常用的两种方式:
- 使用mvn spring-boot:run命令,当然这多亏了Spring Boot的Maven插件。
- 先使用mvn package命令将项目打包(maven打包后,Spring Boot Maven插件会将jar包二次打包),然后在命令行运行"java -jar xxx.jar"即可。
**ps:**在项目的target目录下,xxx.jar.original是Maven打包的原始jar包,xxx.jar是插件的二次打包。
项目跑起来后,浏览器地址栏输入"localhost:8080/demo",验证"Hello World!"结果。
到此你可能会疑惑,Spring MVC项目里为什么会有main函数?没有Servlet容器,项目是怎么运行起来的呢?
main函数可以暂时先理解为Spring Boot应用(基于Spring Boot构建的应用)的独特运行方式。
Spring Boot打出的jar包之所以有单独运行的能力,并不是脱离了Servlet容器,而是将内嵌的Servlet容器一起打包了!这归功于上面的spring-boot-starter-web依赖。Sring Boot对多种内嵌容器进行了支持,只需要配置相关的starter依赖即可。
**ps:**查看文档可以看出,Spring Boot对Servlet容器的支持,Servlet版本均在3.0以上,需要使用者多了解Servlet3.0的机制。
将应用打包成jar运行,一个好处是你可以像Java SE那样来运行程序;更有利的一点是,可执行jars可用于生产部署。由于它们是自包含的,非常适合基于云的部署。