利用IntelliJ IDEA新建一個Spring Boot項目的Web工程java
工程建好以後會出現以下的目錄結構:web
值得注意的第一件事是,整個項目結構遵循傳統Maven項目的佈局,即主要應用程序代碼位於src/main/java目錄裏,資源都在src/main/resources目錄裏,測試代碼則在src/test/java目錄裏。此刻尚未測試資源,但若是有的話,要放在src/test/resources裏。
再進一步,你會看到項目裏還有很多文件。spring
先讓咱們來看看SpringBootHelloworldApplication。apache
2.1 啓動引導Springbootstrap
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 Boot的早期版本中,你須要在ReadingListApplication類上同時標上這三個註解,但從Spring Boot 1.2.0開始,有@SpringBootApplication就好了。
如我所說,SpringBootHelloworldApplication仍是一個啓動引導類。要運行Spring Boot應用程序有幾種方式,其中包含傳統的WAR文件部署。但這裏的main()方法讓你能夠在命令行裏把該應用程序看成一個可執行JAR文件來運行。這裏向SpringApplication.run()傳遞了一個
SpringBootHelloworldApplication類的引用,還有命令行參數,經過這些東西啓動應用程序。app
實際上,就算一行代碼也沒寫,此時你仍然能夠構建應用程序嚐嚐鮮。maven
應用程序應該能正常運行,啓動一個監聽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.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.1 Controller層
HelloWorldController的代碼以下:
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類:
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!