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>