Spring Boot 成長之路(一) 快速上手
1.創建工程
利用IntelliJ IDEA新建一個Spring Boot項目的Web工程
2.查看初始化的spring boot項目
工程建好之後會出現如下的目錄結構:
值得註意的第一件事是,整個項目結構遵循傳統Maven項目的布局,即主要應用程序代碼位於src/main/java目錄裏,資源都在src/main/resources目錄裏,測試代碼則在src/test/java目錄裏。此刻還沒有測試資源,但如果有的話,要放在src/test/resources裏。
再進一步,你會看到項目裏還有不少文件。
- pom.xml:Maven構建說明文件。
- SpringBootHelloworldApplication
- application.properties:用於配置應用程序和Spring Boot的屬性。
- SpringBootHelloworldApplicationTests:一個基本的集成測試類。
先讓我們來看看SpringBootHelloworldApplication。
2.1 啟動引導Spring
SpringBootHelloworldApplication在Spring Boot應用程序裏有兩個作用:配置和啟動引導。首先,這是主要的Spring配置類。雖然Spring Boot的自動配置免除了很多Spring配置,但你還需要進行少量配置來啟用自動配置。
package com.cloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootHelloworldApplication { public static void main(String[] args) { SpringApplication.run(SpringBootHelloworldApplication.class, args); } }
@SpringBootApplication開啟了Spring的組件掃描和Spring Boot的自動配置功能。實際上,@SpringBootApplication將三個有用的註解組合在了一起。
- Spring的@Configuration:標明該類使用Spring基於Java的配置。雖然本書不會寫太多配置,但我們會更傾向於使用基於Java而不是XML的配置。
- Spring的@ComponentScan:啟用組件掃描,這樣你寫的Web控制器類和其他組件才能被自動發現並註冊為Spring應用程序上下文裏的Bean。本章稍後會寫一個簡單的Spring MVC控制器,使用@Controller進行註解,這樣組件掃描才能找到它。
- Spring Boot 的@EnableAutoConfiguration : 這個不起眼的小註解也可以稱為@Abracadabra,就是這一行配置開啟了Spring Boot自動配置的魔力,讓你不用再寫成篇的配置了。
在Spring Boot的早期版本中,你需要在ReadingListApplication類上同時標上這三個註解,但從Spring Boot 1.2.0開始,有@SpringBootApplication就行了。
如我所說,SpringBootHelloworldApplication還是一個啟動引導類。要運行Spring Boot應用程序有幾種方式,其中包含傳統的WAR文件部署。但這裏的main()方法讓你可以在命令行裏把該應用程序當作一個可執行JAR文件來運行。這裏向SpringApplication.run()傳遞了一個
SpringBootHelloworldApplication類的引用,還有命令行參數,通過這些東西啟動應用程序。
實際上,就算一行代碼也沒寫,此時你仍然可以構建應用程序嘗嘗鮮。
應用程序應該能正常運行,啟動一個監聽8080端口的Tomcat服務器。要是願意,你可以用瀏覽器訪問http://localhost:8080,但由於還沒寫控制器類,你只會收到一個HTTP 404(NOT FOUND)錯誤,看到錯誤頁面。在本章結束前,這個URL將會提供一個閱讀列表應用程序。
你幾乎不需要修改SpringBootHelloworldApplication.java。如果你的應用程序需要Spring Boot自動配置以外的其他Spring配置,一般來說,最好把它寫到一個單獨的@Configuration標註的類裏。(組件掃描會發現並使用這些類的。)極度簡單的情況下,可以把自定義配置加入SpringBootHelloworldApplication.java。
2.2. 配置應用程序屬性
Initializr為你生成的application.properties文件是一個空文件。實際上,這個文件完全是可選的,你大可以刪掉它,這不會對應用程序有任何影響,但留著也沒什麽問題。
稍後,我們肯定有機會向application.properties裏添加幾個條目。但現在,如果你想小試牛刀,
可以加一行看看:
server.port=8000
加上這一行,嵌入式Tomcat的監聽端口就變成了8000,而不是默認的8080。你可以重新運行應用程序,看看是不是這樣。
這說明application.properties文件可以很方便地幫你細粒度地調整Spring Boot的自動配置。你還可以用它來指定應用程序代碼所需的配置項。在第3章裏我們會看到好幾個例子,演示application.properties的這兩種用法。
要註意的是,你完全不用告訴Spring Boot為你加載application.properties,只要它存在就會被加載,Spring和應用程序代碼都能獲取其中的屬性。
我們差不多已經把初始化的項目介紹完了,還剩最後一樣東西,讓我們來看看Spring Boot應用程序是如何構建的。
3.創建pom.xml文件
3.1 設置spring boot的parent
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
Spring boot的項目必須要將 parent設置為 spring boot的 parent,該 parent包含了大量默認的配置。
3.2 導入spring boot的web支持
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
3.3 添加spring boot插件
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
工程創建好了之後,會生成默認的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.cloud</groupId> <artifactId>spring-boot-helloworld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>spring-boot-helloworld</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.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>
4.HelloWorld實戰詳解
4.1 Controller層
HelloWorldController的代碼如下:
package com.cloud;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by peter on 2017-10-09.
*/
@RestController
public class HelloWorldController {
@RequestMapping("/")
public String sayHello(){
return "Hello,World!";
}
}
@RestController和@RequestMapping註解是來自SpringMVC的註解,它們不是SpringBoot的特定部分。
(1). @RestController:提供實現了REST API,可以服務JSON,XML或者其他。這裏是以String的形式渲染出結果。
(2). @RequestMapping:提供路由信息,"/“路徑的HTTP Request都會被映射到sayHello方法進行處理。
4.2 啟動應用類
和第一段描述一樣,開箱即用。如下面Application類:
package com.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootHelloworldApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootHelloworldApplication.class, args);
}
}
(1). @SpringBootApplication:Spring Boot 應用的標識
(2). Application很簡單,一個main函數作為主入口。SpringApplication引導應用,並將Application本身作為參數傳遞給run方法。具體run方法會啟動嵌入式的Tomcat並初始化Spring環境及其各Spring組件。
4.3 Controller層測試類
一個好的程序,不能缺少好的UT。針對HelloWorldController的UT如下:
package com.cloud; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import static org.junit.Assert.assertEquals; @RunWith(SpringRunner.class) @SpringBootTest public class SpringBootHelloworldApplicationTests { @Test public void testSayHello() { assertEquals("Hello,World!",new HelloWorldController().sayHello()); } }
4.4 運行
直接編譯運行代碼,然後訪問 http://localhost:8080/ ,即可在頁面中看到Spring Boot對你 say hello:
Hello,World!
Spring Boot 成長之路(一) 快速上手