Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员再也不须要定义样板化的配置。经过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。java
Spring Boot具备以下特性:web
本博客Spring Boot使用版本1.5.8.RELEASE,Spring Boot 1.5.8.RELEASE须要Java 7和Spring Framework 4.3.12.RELEASE或更高版本,你也可使用Spring Boot with Java 6和一些额外的配置(不建议),使用Maven(3.2+)或Gradle 2(2.9或更高版本)和3来构建。spring
本博客系列统一使用Java 1.8,Spring Boot 1.5.8.RELEASE以及Maven3.2.5版本。apache
一个简单的spring boot项目结构以下:json
一、首先建立一个通常的Maven项目,有一个pom.xml和基本的src/main/java
结构。api
二、修改pom.xml为以下内容浏览器
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
spring boot父级依赖>安全
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.8.RELEASE</version> </parent>
这块配置就是Spring Boot父级依赖,有了这个,当前的项目就是Spring Boot项目了,spring-boot-starter-parent是一个特殊的starter,它用来提供相关的Maven默认依赖,使用它以后,经常使用的包依赖能够省去version标签。服务器
若是你不想使用某个依赖默认的版本,您还能够经过覆盖本身的项目中的属性来覆盖各个依赖项,例如,要升级到另外一个Spring Data版本系列,您能够将如下内容添加到pom.xml中。mvc
<properties> <spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version> </properties>
本来默认版本是Ingalls-RELEASE的,如今就使用Fowler-SR2版本了。
并非每一个人都喜欢继承自spring-boot-starter-parent POM。您可能有您须要使用的本身的公司标准parent,或者您可能更喜欢显式声明全部的Maven配置。若是你不想使用spring-boot-starter-parent,您仍然能够经过使用scope = import依赖关系来保持依赖关系管理:
<dependencyManagement> <dependencies> <dependency> <!-- Import dependency management from Spring Boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
该设置不容许您使用如上所述的属性(properties)覆盖各个依赖项,要实现相同的结果,您须要在spring-boot-dependencies项以前的项目的dependencyManagement中添加一个配置,例如,要升级到另外一个Spring Data版本系列,您能够将如下内容添加到pom.xml中。
<dependencyManagement> <dependencies> <!-- Override Spring Data release train provided by Spring Boot --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-releasetrain</artifactId> <version>Fowler-SR2</version> <scope>import</scope> <type>pom</type> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>1.5.8.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
起步依赖spring-boot-starter-*>
Spring Boot提供了不少”开箱即用“的依赖模块,都是以spring-boot-starter-xx做为命名的。打个比方来讲明一下这个起步依赖的好处,好比组装台式机和品牌机,本身组装的话须要本身去选择不一样的零件,最后还要组装起来,期间有可能会遇到零件不匹配的问题。耗时又消力,而品牌机就好一点,买来就能直接用的,后续想换零件也是能够的。相比较之下,后者带来的效果更好点(这里就不讨论价格问题哈),起步依赖就像这里的品牌机,自动给你封装好了你想要实现的功能的依赖。就好比咱们以前要实现web功能,引入了spring-boot-starter-web这个起步依赖。
起步依赖本质上是一个Maven项目对象模型(Project Object Model,POM),定义了对其余库的传递依赖,这些东西加在一块儿即支持某项功能。不少起步依赖的命名都暗示了它们提供的某种或者某类功能。
spring boot maven插件>
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
上面的配置就是Spring Boot Maven插件,Spring Boot Maven插件提供了许多方便的功能:
三、应用入口类DemoApplication
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication(scanBasePackages = "com.example") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
DemoApplication是一个很关键的启动类,程序的入口就是这里。@SpringBootApplication是Sprnig Boot项目的核心注解,主要目的是开启自动配置。main方法这是一个标准的Java应用的main的方法,主要做用是做为项目启动的入口。
四、控制类DemoController
package com.example.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class DemoController { @RequestMapping("/hello") public String index() { return "Hello World"; } }
控制类中添加@RestController以及index方法,@RestController注解等价于@Controller+@ResponseBody的结合,使用这个注解的类里面的方法都以json格式输出。
五、运行
启动应用入口类,打开浏览器访问http://localhost:8080/hello, 你就能看到页面显示Hello Spring Boot效果了,一个简单的Web的项目就是如此简单。
打开的src/test/下的测试入口,编写简单的http请求来测试;使用mockmvc进行,利用MockMvcResultHandlers.print()打印出执行结果。
@RunWith(SpringRunner.class) @SpringBootTest public class HelloTests { private MockMvc mvc; @Before public void setUp() throws Exception { mvc = MockMvcBuilders.standaloneSetup(new DemoController()).build(); } @Test public void getHello() throws Exception { mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(equalTo("Hello World"))); } }
热启动在正常开发项目中已经很常见了吧,虽然平时开发web项目过程当中,改动项目启重启老是报错;但springBoot对调试支持很好,修改以后能够实时生效,须要添加如下的配置:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> </plugins> </build>