笔者最近在学习Spring Boot的参考指南,很兴奋!由于Spring Boot中有太多的亮点值得点赞了,笔者认为,当你从无到有,经历过全部的痛点或迷茫以后,忽然有一个“神器”帮你解决了以前的困惑时,你对这个“神器”才会有更深入的感悟及印象。html
简单介绍下Sring Boot:Spring Boot使开发独立的, 产品级别的基于Spring的应用变得很是简单, 你只需"just run"。 咱们为Spring平台及第三方库提供开箱即用的设置, 这样你就能够有条不紊地开始。多数Spring Boot应用须要不多的Spring配置。java
很明显,Spring Boot能够很方便地帮你构建基于Spring开发的应用!web
Spring Boot的主要目标是:spring
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的最佳实践,给出更方便的配置与操做。app
在pom.xml中添加以下配置便可:less
<!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.3.0.BUILD-SNAPSHOT</version> </parent>
Spring Boot提供不少"Starter POMs", 这可以让你轻松的将jars添加到你的classpath下。maven
程序已经在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中添加依赖便可:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
这个spring-boot-starter-web会把开发Spring MVC应用所可能用到的依赖自动地帮你加载进来。能够经过mvn dependency:tree命令查看。
添加一个Spring Boot的Maven插件,它能够提供更多的Maven功能。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
这个插件既可使咱们应用mvn spring-boot:run命令来运行程序,也能够帮咱们二次打包应用为可运行的jar包!Java没有提供任何标准的加载内嵌jar文件(即jar文件中还包含jar文件)的方法,Spring Boot采起一个不一样的途径,并容许你真正的内嵌jars。
固然要使用插件二次打包这个特性,须要绑定repackage目标的 <executions> 配置。若是你不使用parent POM, 你将须要本身声明该配置。具体可参见插件文档。
最后,若是你使用的Spring Boot不是release版本,可能须要在pom.xml中添加如下配置:
<!-- (you don't need this if you are using a .RELEASE version) --> <repositories> <repository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> <snapshots><enabled>true</enabled></snapshots> </repository> <repository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <url>http://repo.spring.io/snapshot</url> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <url>http://repo.spring.io/milestone</url> </pluginRepository> </pluginRepositories>
上述的项目pom.xml配置完成后,写一个简单的SpringMVC的示例。
首先创建一个DemoController。
@RestController public 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); } }
要项目跑起来有经常使用的两种方式:
**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可用于生产部署。因为它们是自包含的,很是适合基于云的部署。