spring boot入門指南(來自官網入門指南)
1. spring boot 可以使你通過很小的前期配置儘可能快的啟動和執行專案,spring boot用自己的觀點來建立產品已有的應用
2. 啟動:
使用spring boot建立一個應用:
本指南提供了spring boot如何幫助你加快和促進應用的開發。和你看過的其他啟動指南一樣,在本指南中你會看到更多spring boot的使用案例。
意味著給你一個更快的spring boot體驗。如果你想要建立自己的spring boot專案,訪問Spring Initializr,填寫你的詳細專案資訊,選擇你的
選項,你可以下載maven構建檔案,或將一個打包的專案作為zip檔案下載。
你將要建立什麼:
你將要使用spring boot建立一個簡單的web應用並給他新增一些有用的而服務。
你需要什麼:
大約15分鐘
一個喜愛的文字編輯器或整合開發環境
1.8或以上JDK
Gradle 4+ 或 Maven 3.2+
你也可以直接將程式碼匯入你的整合開發環境:
Spring Tool Suite (STS)
IntelliJ IDEA
如何完成這次引導:
和其他的spring啟動指南一樣,你可以從頭開始一步步的完成也可以跳過已經熟悉的基本步驟。無論以那種方式,最終都是使程式碼正常執行。
如果從頭開始,請移步到Build with Gradle.
如果要跳過基礎操作,執行以下步驟:
下載和解壓本指南的原始碼庫,或使用git下載:
git clone https://github.com/spring-guides/gs-spring-boot.git
切換進入gs-spring-boot/initial
向前跳到[initial].
如果你已經完成以上步驟,請將你的操作結果與gs-spring-boot/complete中的程式碼進行對比。
使用maven建立:
你首先要設定一個基本構建指令碼。你可以使用任何你喜歡的構建系統來構建spring應用,但是你要執行的程式碼必須包含maven。如果你不熟悉maven,
可以參考Building Java Projects with Maven。
建立目錄結構:
src
|-main
|-java
|-hello
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>org.springframework</groupId>
<artifactId>gs-spring-boot</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
spring boot maven外掛-spring-boot-maven-plugin提供了許多方便的特性:
它集合了類路徑中所有jar,建立了一個單一的可執行的"über-jar",使得你的服務更方便的執行和傳輸。
它查詢public static void main()方法作為啟動類
它提供了一個內建依賴解析器來設定與spring boot的依賴相匹配的版本號。無論你覆蓋你想要的任何版本,都會被重置為為Boot選擇的預設
版本設定。
使用ide建立:
直接去Spring Tool Suite獲取如何直接匯入guide專案
從IntelliJ IDEA中獲取如何執行guide專案
學習你可以用spring boot幹什麼:
spring boot提供了一種快速建立應用的方式。他會檢視你的類路徑和你已經配置的bean,並對你缺少的內容作出合理的假設,並新增它。使用
spring boot您可以更多的關注業務特性,而較少的關注基礎設施。
例如:
spring mvc中對於你總是用到的一些特定的bean,spring boot會自動新增。一個Spring MVC需要servlet容器,spring boot會自動配置嵌入式
comcat
如果你需要jetty而不是tomcat,spring boot會自動嵌入jetty。
Thymeleaf?一些必須總是新增到上下文中的bean,spring boot會自動為您新增。
這些只是spring boot提供自動配置的幾個例子。與此同時,spring boot不會影響你的操作。例如,如果Thymeleaf在你的路徑下,spring boot會自動的在你的應用上下文中提供一個SpringTemplateEngine。如果你用自己的配置檔案定義了自己的SpringTemplateEngine,spring boot就不會再添加了。這可以使你在你的角色上付出很少的努力。
spring boot不會生成程式碼或編輯你的檔案。相反,當你啟動應用時,spring boot會動態的的連線bean和設定,並將它們應用到你應用程式的上下文中。
建立一個簡單的web應用:
現在你可以為一個簡單的web應用建立一個web控制器。
package hello;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
public class HelloController {
@RequestMapping("/")
public String index() {
return "Greetings from Spring Boot!";
}
}
這個類被標記為@RestController,意味著它已經準備好被spring mvc使用來處理web請求。@RequestMapping對映“/”到index()方法。當從瀏覽器或命令列的curl呼叫index()方法時,該方法會返回純文字。
那是因為@RestController結合了@Controller和@ResponseBody,這兩個註解會導致web請求返回資料而不是檢視。
建立一個應用類:
在這裡你用元件建立一個應用類:
package hello;
import java.util.Arrays;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}
}
@SpringBootApplication是一個方便的添加了以下所有內容的註解:
@Configuration標記本類作為應用上下文bean定義的來源
@EnableAutoConfiguration告訴spring boot開始基於類路徑,其他bean和各種屬性設定新增bean。
通常你會為spring mvc應用新增@EnableWebMvc,但是spring boot在類路徑中看到spring-webmvc時就會將它自動新增上。
會把應用程式標記為web應用,並激活諸如設定DispatcherServlet之類的關鍵行為。
@ComponentScan告訴spring去尋找hello包中的其他元件、配置和服務,讓他能夠找到控制器。
main()方法通過使用spring boot的SpringApplication.run()方法啟動應用,你有沒有注意到其中一行xml程式碼都沒有?也沒有web.xml檔案。這個web應用是100%純java,您不需要處理任何管道和基礎設施的配置。
這裡也有一個標記為@Bean的CommandLineRunner方法在啟動時執行。它會檢查所有的你的應用建立的或是spring boot建立的bean,給他們排序並打印出來。
執行應用:
如果你使用maven,執行:mvn package && java -jar target/gs-spring-boot-0.1.0.jar
從輸出中你會清晰的看到org.springframework.boot.autoconfigure這個bean
也會看到tomcatEmbeddedServletContainerFactory。
檢驗服務:
$ curl localhost:8080
Greetings from Spring Boot!
新增單元測試:
您希望為您新增的端點新增一個測試,spring測試已經提供了一些機制,可以很容易的包含到您的專案中。
如果你使用maven,將以下內容新增到依賴列表中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
現在寫一個簡單的單元測試,通過你的終端模擬sevlet的請求和響應:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Greetings from Spring Boot!")));
}
}
MockMvc來自於Spring Test,並且允許你通過一組建造者類對DispatcherServlet傳送HTTP請求並對結果進行斷言。
@AutoConfigureMockMvc和@SpringBootTest結合在一起注入一個MockMvc例項。我們使用@SpringBootTest建立整個應用上下文。
另一種方法是使用@WebMvcTest告訴spring boot只建立上下文的web層。spring boot在任何情況下都能夠自動定位主應用程式,
但是如果你想要建立一些不同的應用,你可以覆蓋或縮減它。
和模擬http請求一樣,我們可以使用spring boot寫一個簡單的全棧整合測試。例如,我們可以這樣做:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloControllerIT {
@LocalServerPort
private int port;
private URL base;
@Autowired
private TestRestTemplate template;
@Before
public void setUp() throws Exception {
this.base = new URL("http://localhost:" + port + "/");
}
@Test
public void getHello() throws Exception {
ResponseEntity<String> response = template.getForEntity(base.toString(),
String.class);
assertThat(response.getBody(), equalTo("Greetings from Spring Boot!"));
}
}
這個嵌入式伺服器藉助webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT在隨機埠上啟動,
使用@LocalServerPort來獲取實際埠號。
新增工業級服務:
如果您正在為您的業務建立一個網站,您可能需要新增一些管理服務。spring boot通過actuator module模組提供了一些開箱即用的
功能,如健康,審計,beans等。
如果你使用maven,將以下內容加入到依賴中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
如果你使用maven,執行以下命令:
mvn package && java -jar target/gs-spring-boot-0.1.0.jar
你會看到一組新的RESTful終端加入到了應用中,這是spring boot提供的管理服務。
他們包括 errors, actuator/health, actuator/info, actuator.
同樣有一個/actuator/shutdown終端,但是它只通過JMX可見。在你的application.properties檔案中增加management.endpoints.shutdown.enabled=true,可以使它作為一個http終端使用。
很容易就可以檢測應用的健康情況:
$ curl localhost:8080/actuator/health
{"status":"UP"}
你可以嘗試通過curl呼叫shutdown方法:
$ curl -X POST localhost:8080/actuator/shutdown
{"timestamp":1401820343710,"error":"Method Not Allowed","status":405,"message":"Request method 'POST' not supported"}
由於我們沒有開啟此功能,所以請求會因為不存在而阻塞。
要想知道更多REST終端的詳細資訊以及終端在application.properties檔案中的引數配置,你可以詳細的閱讀docs about the endpoints。
檢視spring boot的啟動項:
你已經看到了一下spring boot的啟動項,你可以在 here in source code.中檢視spring boot的所有啟動項。
JAR支援和Groovy支援:
最後的例子展示spring boot如何將您沒有意識到但是您需要的bean連線起來。展示如何啟動方便的管理服務。
但是spring boot做的更多。它不僅支援war檔案的部署,還通過載入器模型很容易的將可執行的jar包組合在一起。以下演示了對
spring-boot-gradle-plugin和spring-boot-maven-plugin的雙重支援:
以下是groovy程式碼。。。不使用,不翻譯
總結:
恭喜!你使用spring boot建立了一個簡單的應用並且學會了如何使用spring boot加快你的開發步伐。你也開啟了一些有幫助的產品服務。
這只是spring boot的一小部分樣例。如果你想要挖掘的更深可以參考 Spring Boot’s online docs。