Spring Boot經過大量的自動化配置等方式簡化了Spring原有樣板化的配置,使開發者能夠快速構建應用。除此以外,Spring Boot還經過一系列Starter POMs的定義,讓咱們整合各項功能的時候,不須要再Maven的pom.xml中維護那些複雜的依賴關係,而是經過相似模塊化的starter模塊定義來引用,使得依賴管理工做變得更爲簡單。
在現在容器化大行其道的時代,Spring Boot除了能夠很好融入Docker以外,其自身就支持嵌入式的Tomcat、Jetty等容器。因此,經過Spring Boot構建的應用能夠再也不安裝Tomcat,將應用打成war,再部署到Tomcat這樣複雜的構建與部署動做,只需將Spring boot應用打成jar包,並經過java -jar命令直接運行就能啓動一個標準化的web應用,這使得Spring boot應用十分輕便。
項目構建與解析
1 系統及工具版本要求
- java 7 及以上版本
- Spring framework 4.2.7及以上版本
- Maven 3.2 及以上版本 / Gradle 1.12 及以上版本
2 構建Maven項目
- 選擇構建工具 Maven Project、Spring boot版本選擇1.3.7以上,填寫Group和Artifact信息,在Search for dependencies 中搜索須要的其餘依賴包,由於要實現RESTful API,因此能夠添加Web依賴。
- 單擊Generate Project按鈕下載項目壓縮包
- 解壓項目包,並用IDE以Maven項目導入。
工程結構解析
- src/main/java: 主程序入口HelloApplication,可經過該類直接啓動Spring Boot項目
- src/main/resources:配置目錄,引入配置信息。因爲引入了Web模塊,所以產生了static目錄和templates目錄,前者存放靜態資源,如圖片、CSS、javascript等;後者用於存放Web頁面的模板文件
- src/test:單元測試目錄,生成的HelloApplicationTests經過JUnit4實現,能夠直接用運行Spring Boot應用的測試。
Maven配置分析
<?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>hello</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hello</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</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>
能夠看到,groupId和artifactId對應生成項目時頁面上輸入的內容。另外,默認的打包形式爲jar,由於默認的web模塊依賴會包含嵌入式的Tomcat,使應用的jar自身就具有了提供web服務的能力
父項目parent配置中定義了Spring Boot版本的基礎依賴以及一些默認配置內容,好比,配置文件application.properties的位置等。
在項目依賴dependencies配置中,包含了下面兩項:
spring-boot-starter-web:全棧Web開發模塊,包含嵌入式Tomcat、Spring MVC。
spring-boot-starter-test:經過測試模塊,包含JUnit、Hamcrest、Mockito。
這裏所引用的web和test模塊,在Spring Boot生態中被稱爲Starter POMs。Starter POMs是一系列輕便的依賴包,是一套一站式的Spring相關技術的解決方案。開發者在使用和整合模塊時,沒必要再去搜尋樣例式的依賴配置來複制使用,只需引入對應的模塊包便可。好比,開發web應用的時候,就引入spring-boot-starter-web,但願應用具有訪問數據庫能力的時候,那就再引入spring-boot-starter-jdbc或是更好用的spring-boot-starter-data-jpa。
Spring boot的Starter POMs採用spring-boot-starter-*的命名方式,*表明一個特別的應用功能模塊。
在最後項目構建的build部分,引入Spring boot的Maven插件,幫助方便的啓停應用,這樣在開發時就不用每次去找主類或是打包成jar來運行微服務,只須要經過 mvn spring-boot:run 命令就能夠快速啓動spring boot應用。
實現RESTful API
在Spring boot中建立RESTful API的實現代碼和Spring MVC應用同樣,只是減小了一些配置文件,能夠直接開始編寫Controller內容。
@RestController
public class HelloController {
@RequestMapping(value = "index")
public String index(){
return "hello";
}
}
啓動該應用,經過瀏覽器訪問http://localhost:8080/index,返回預期效果:hello。
啓動Spring Boot應用
一、做爲Java應用程序,能夠直接經過運行擁有main函數的類來啓動
二、在Maven配置中,以前提到了spring-boot插件,可使用它來啓動,好比執行:mvn spring-boot:run命令,或是直接單擊IDE中對maven插件的工具
三、在服務器上部署運行時,一般先使用 mvn install 將應用打包成jar包,再經過 java -jar xxx.jar 來啓動應用。
配置詳解
配置文件
在上述示例中提到過src/main.resources目錄是Spring Boot的配置目錄,因此當要爲應用建立個性化配置時,應在該目錄下進行。
Spring Boot的默認配置文件位置爲src/mian/resources/application.properties。關於Spring boot應用的配置內容均可以幾種在該文件中,根據咱們引入的不一樣starter模塊,能夠在這裏定義容器端口號、數據庫鏈接信息、日誌級別等各類配置信息。好比要修改web模塊的服務端口號,能夠在application.properties文件中添加 server.port=8888 來指定服務端口爲8888(默認端口爲8080)。
Spring boot的配置文件除了可使用傳統的properties文件以外,還支持YAML文件。
YAML採用的配置格式不像properties的配置那樣以單純的鍵值對形式來表示,而是以相似大綱的縮進形式來表示。好比
server:
port: 9996
contextPath: /webux
tomcat:
uri-encoding: utf-8
spring:
application:
name: emer-business-webux
thymeleaf:
cache: false
suffix: .html
content-type: text/html; charset=utf-8
enabled: true
encoding: utf-8
經過YAML的配置方式能夠減小配置內容的字符量,其結構也更爲清晰易讀。javascript
自定義參數
能夠在配置文件中定義一些咱們須要的自定義屬性,而後在應用中經過@Value註解來加載這些自定義參數。(方式不少種)