首先聲明,Spring Boot不是一門新技術,所以不用緊張。從本質上來說,Spring Boot就是Spring,它做了那些沒有它你也會去做的Spring Bean配置。
它使用“習慣優於配置”(項目中存在大量的配置,此外還內置了一個習慣性的配置,讓你無需手動進行配置)的理念讓你的項目快速運行起來。使用Spring Boot很容易創建一個獨立運行(運行jar,內嵌Servlet容器)、準生產級別的基於Spring框架的項目,使用Spring Boot你可以不用或者只需要很少的Spring配置。
Spring Boot精要
Spring將很多魔法帶入了Spring應用程序的開發之中,其中最重要的是以下四個核心。
自動配置:針對很多Spring應用程序常見的應用功能,Spring Boot能自動提供相關配置
起步依賴:告訴Spring Boot需要什麼功能,它就能引入需要的庫。
命令行界面:這是Spring Boot的可選特性,藉此你只需寫代碼就能完成完整的應用程序,無需傳統項目構建。
Actuator:讓你能夠深入運行中的Spring Boot應用程序,一探究竟。
詳細的我們就不展開,等你愛上後自然會去深入的瞭解,後續章節我們會一一展開介紹。接下來讓我們開搞吧。
系統要求
目前Spring Boot正式版爲2.x.RELEASE默認情況下,Spring Boot 2.0.RELEASE需要Java 8和Spring Framework 4.x.RELEASE或更高版本, ,使用Maven(3.x+)或Gradle 4來構建。
所以本博客系列統一使用Java 1.8,Spring Boot 1.5..RELEASE以及Maven3.3.9版本。開發工具使用IDEA。
光速入門-開發一個web服務
沒有比較就沒有傷害,讓我們先看看傳統Spring MVC開發一個簡單的Hello World Web應用程序,你應該做什麼,我能想到一些基本的需求。
一個項目結構,其中有一個包含必要依賴的Maven或者Gradle構建文件,最起碼要有Spring MVC和Servlet API這些依賴。
一個web.xml文件(或者一個WebApplicationInitializer實現),其中聲明瞭Spring的DispatcherServlet。
一個啓動了Spring MVC的Spring配置
一控制器類,以“hello World”相應HTTP請求。
一個用於部署應用程序的Web應用服務器,比如Tomcat。
最讓人難以接受的是,這份清單裏面只有一個東西是和Hello World功能相關的,即控制器,剩下的都是Spring開發的Web應用程序必需的通用模板。
接下來看看Spring Boot如何搞定?
很簡單,我僅僅只需要非常少的幾個配置就可以迅速方便的搭建起來一套web項目
初始化Spring Boot項目
構建一個Sping Boot的Maven項目,強烈推薦Spring Initializr,它從本質上來說就是一個Web應用程序,它能爲你生成Spring Boot項目結構。
Spring Initializr有幾種用法:
通過Web界面使用
訪問:http://start.spring.io/
選擇構建工具Maven Project、Spring Boot版本1.5.1以及一些工程基本信息,可參考下圖所示
點擊Generate Project下載項目壓縮包
導入到你的工程,如果是IDEA,則需要:
a.菜單中選擇File–>New–>Project from Existing Sources…
b.選擇解壓後的項目文件夾,點擊OK
c.點擊Import project from external model並選擇Maven,點擊Next到底爲止。
d.若你的環境有多個版本的JDK,注意到選擇Java SDK的時候請選擇Java 7以上的版本
通過IntelliJ IDEA使用(個人推薦)
IntelliJ IDEA是非常流行的IDE,IntelliJ IDEA 14.1已經支持Spring Boot了。
創建Spring Boot操作步驟如下:
1.在File菜單裏面選擇 New > Project,然後選擇Spring Initializr,接着如下圖一步步操作即可。
項目結構
根據上面的操作已經初始化了一個Spring Boot的框架了,項目結構如下:
如你所見,項目裏面基本沒有代碼,除了幾個空目錄外,還包含如下幾樣東西。
pom.xml:Maven構建說明文件。
DemoApplication.java:一個帶有main()方法的類,用於啓動應用程序(關鍵)。
DemoApplicationTests.java:一個空的Junit測試類,它加載了一個使用Spring Boot字典配置功能的Spring應用程序上下文。
application.properties:一個空的properties文件,你可以根據需要添加配置屬性。
解析pom.xml
大家跟我一起移步pom.xml,看看Spring Boot的跟普通Spring MVC工程的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>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>2.0.1.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</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.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
這塊配置就是Spring Boot父級依賴,有了這個,當前的項目就是Spring Boot項目了,spring-boot-starter-parent是一個特殊的starter,它用來提供相關的Maven默認依賴,使用它之後,常用的包依賴可以省去version標籤。關於Spring Boot提供了哪些jar包的依賴,可查看C:\Users\xx.m2\repository\org\springframework\boot\spring-boot-dependencies\1.5.1.RELEASE\spring-boot-dependencies-1.5.1.RELEASE.pom
這裏我就貼一點點意思意思,如下:
<properties>
<!-- Dependency versions -->
<activemq.version>5.14.3</activemq.version>
<antlr2.version>2.7.7</antlr2.version>
<appengine-sdk.version>1.9.48</appengine-sdk.version>
<artemis.version>1.5.2</artemis.version>
<aspectj.version>1.8.9</aspectj.version>
<assertj.version>2.6.0</assertj.version>
<atomikos.version>3.9.3</atomikos.version>
<bitronix.version>2.1.4</bitronix.version>
<caffeine.version>2.3.5</caffeine.version>
<cassandra-driver.version>3.1.3</cassandra-driver.version>
<classmate.version>1.3.3</classmate.version>
<commons-beanutils.version>1.9.3</commons-beanutils.version>
<commons-collections.version>3.2.2</commons-collections.version>
<spring-data-releasetrain.version>Ingalls-RELEASE</spring-data-releasetrain.version>
......
</properties>
如果你不想使用某個依賴默認的版本,您還可以通過覆蓋自己的項目中的屬性來覆蓋各個依賴項,例如,要升級到另一個Spring Data版本系列,您可以將以下內容添加到pom.xml中。
<properties>
<spring-data-releasetrain.version>Fowler-SR2</spring-data-releasetrain.version>
</properties>
原本默認版本是Ingalls-RELEASE的(看上面最後一行有說明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.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
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插件提供了許多方便的功能:
把項目打包成一個可執行的超級JAR(uber-JAR),包括把應用程序的所有依賴打入JAR文件內,併爲JAR添加一個描述文件,其中的內容能讓你用java -jar來運行應用程序。
搜索public static void main()方法來標記爲可運行類。
應用入口類
DemoApplication是一個很關鍵的啓動類,程序的入口就是這裏,爲了演示簡單,我們不再新建控制類,而是直接在這個入口類中編寫,添加@RestController以及index方法,如下:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class DemoApplication {
@RequestMapping("/")
public String index(){
return "Hello Spring Boot";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
@SpringBootApplication是Sprnig Boot項目的核心註解,主要目的是開啓自動配置。後續講解原理的時候再深入介紹。
main方法這是一個標準的Java應用的main的方法,主要作用是作爲項目啓動的入口。
@RestController註解等價於@Controller+@ResponseBody的結合,使用這個註解的類裏面的方法都以json格式輸出。
最後,啓動項目有三種方式:
DemoApplication的main方法
使用命令 mvn spring-boot:run”在命令行啓動該應用,IDEA中該命令在如下位置:
運行“mvn package”進行打包時,會打包成一個可以直接運行的 JAR 文件,使用“java -jar”命令就可以直接運行。
打開瀏覽器訪問http://localhost:8080, 你就能看到頁面顯示Hello Spring Boot效果了,一個簡單的Web的項目就是如此簡單。
結束
雖然我上面講解了那麼多,但是實際開發步驟就是那麼簡單暴力,初始化一個Spring Boot,添加一個控制類,啓動就能看到效果了。
本章作爲入門Spring Boot的入門介紹,相關的需要理解的概念就只有這幾點:
Spring Boot父級依賴的概念
應用入口類的作用