Spring Boot是由Pivotal團隊提供的全新框架,其設(shè)計目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程。該框架使用了特定的方式來進行配置,從而使開發(fā)人員不再需要定義樣板化的配置。通過這種方式,Boot致力于在蓬勃發(fā)展的快速應(yīng)用開發(fā)領(lǐng)域(rapid application development)成為領(lǐng)導(dǎo)者。
Spring Boot是基于Spring框架基礎(chǔ)上推出的一個全新的框架, 旨在讓開發(fā)者可以輕松地創(chuàng)建一個可獨立運行的,生產(chǎn)級別的應(yīng)用程序。基于Spring Boot內(nèi)部的自動化配置功能,開發(fā)者可以在“零”配置, 或者只需要添加很少的配置,就可以進行日常的功能開發(fā)。
Spring Boot的特點
1)創(chuàng)建獨立的Spring應(yīng)用程序;
2)直接嵌入Tomcat,Jetty或Undertow,無需部署WAR文件;
3)提供推薦的基礎(chǔ)POM文件(starter)來簡化Apache Maven配置;
4)盡可能的根據(jù)項目依賴來自動配置Spring框架;
5)提供可以直接在生產(chǎn)環(huán)境中使用的功能,如性能指標(biāo),應(yīng)用信息和應(yīng)用健康檢查;
6)開箱即用,沒有代碼生成,不需要配置過多的xml。同時也可以修改默認值來滿足特定的需求。
7)其他大量的項目都是基于Spring Boot之上的,如Spring Cloud。
Spring Boot優(yōu)缺點
??優(yōu)點
1)Spring Boot可以支持開發(fā)人員快速的開發(fā)出restful風(fēng)格的微服務(wù)架構(gòu);
2)Spring Boot自動化確實方便,做微服務(wù)再合適不過了,單一jar包部署和管理都非常方便。只要系統(tǒng)架構(gòu)設(shè)計合理,大型項目也能用,加上nginx負載均衡,輕松實現(xiàn)橫向擴展;
3)Spring Boot要解決的問題, 精簡配置是一方面, 另外一方面是如何方便的讓spring生態(tài)圈和其他工具鏈整合(比如Redis,email,elasticsearch)。
??優(yōu)點
1)版本迭代速度更新太快,一些模塊的改動很大;
2)由于無需配置或少量配置,報錯時定位比較有難度;
3)網(wǎng)上現(xiàn)有資源的解決方案比較少見。
Spring Boot的核心功能
1)獨立運行spring項目。Spring Boot以jar包的形式可以獨立運行,使用java -jar xx.jar 就可以成功運行項目。
2)內(nèi)嵌servlet容器。內(nèi)嵌容器,使得我們可以執(zhí)行運行項目的主程序main函數(shù),使得項目可以快速運行。
3)提供starter簡化Maven配置。Spring Boot提供了一系列的start pol用來簡化maven依賴。如:常用的spring-boot-starter-web、spring-boot-starter-tomcat、spring-boot-starter-actuator等。
??Spring Boot推薦基礎(chǔ)POM文件
4)自動配置spring。Spring Boot會根據(jù)我們項目中類路徑的jar包,為jar包的類進行自動裝配bean。
5)應(yīng)用監(jiān)控。Spring Boot提供了基于HTTP、ssh、telnet對運行時的項目進行監(jiān)控。
搭建第一個Spring Boot程序
??環(huán)境準備
一個比較不錯的文本編輯器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、IntelliJ IDEA)
Java環(huán)境(JDK 1.8或以上版本)
Maven 3.0+IntelliJ IDEA(Eclipse和IntelliJ IDEA內(nèi)置,如果使用IDE并且不使用命令行工具可以不安裝)。
??maven構(gòu)建項目
1)官網(wǎng)地址:http://start.spring.io/
2)選擇構(gòu)建工具
Project(項目):Maven Project;
Language(語言):Java;
Spring Boot(版本):2.3.0M2;
Project Metadata(項目元數(shù)據(jù)):Group [com.yoodb]和Artifact[demo];
Dependencies(依賴關(guān)系):
[Name:springboot-study-demo01;
Description:Demo project for Spring Boot;
Package name:com.yoodb.study.demo01;
Package name:War;Java(JDK):8],可參考如圖所示:
Spring Boot2.3.0.M2這一個里程碑的主要包括:改進Docker鏡像支持;升級到 MongoDB 4(仍處于 beta 版);支持配置文件的通配符位置;眾多依賴項升級。
3)點擊“Generate-Crtl+”按鈕下載項目壓縮包;
4)解壓后,使用IntelliJ IDEA,Project Settings -> + ,導(dǎo)入Maven項目后點擊“OK”,如圖所示:
5)選中右側(cè)Maven菜單,執(zhí)行install命令,等待執(zhí)行完成,如圖所示:
?目錄結(jié)構(gòu)
Maven項目導(dǎo)入成功后,目錄結(jié)構(gòu)如下圖所示:
Spring Boot的基礎(chǔ)結(jié)構(gòu)共三個文件:
src/main/java 程序開發(fā)以及主程序入口
src/main/resources 配置文件
src/test/java? 測試程序
Spring boot官方建議的目錄結(jié)果如下:
root package結(jié)構(gòu):com.example.yourproject
com
??+-?example
????+-?yourproject
??????+-?Application.java
|
??????+-?domain
??????|??+-?Customer.java
|??+-?CustomerRepository.java
??????|
??????+-?service
|??+-?CustomerService.java
??????|
??????+-?controller
|??+-?CustomerController.java
??????|
1)Application.java 建議放到根目錄下面,主要用于做一些框架配置;
2)domain目錄主要用于實體(Entity)與數(shù)據(jù)訪問層(Repository);
3)service 層主要是業(yè)務(wù)類代碼;
4)controller 負責(zé)頁面訪問控制。
采用默認配置可以省去很多配置,當(dāng)然也可以根據(jù)自己的喜歡來進行更改,到此一個Spring boot框架的Maven項目搭建完成。
?Maven項目啟動
編寫controller類文件,代碼如下所示:
package?com.yoodb.study.demo01;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;
@RestController
public?class?HelloWorldController?{
????@RequestMapping("/hello")
????public?String?index()?{
return?"關(guān)注微信公眾號“Java精選”,Spring?Boot系列文章持續(xù)更新中,帶你從入門到精通,玩轉(zhuǎn)Spring?Boot框架。";
????}
}
注:@RestController的含義是controller里面的方法都以json格式輸出。
啟動主程序,執(zhí)行如圖所示:
打開瀏覽器訪問http://localhost:8080/hello,就可以看到效果了,是不是感覺很簡單,那么大家趕緊試一試吧!歡迎關(guān)注微信公眾號“Java精選”,持續(xù)更新Spring Boot系列文章,供大家參考和學(xué)習(xí)。
Spring Boot如何做單元測試?
打開的src/test/下的測試入口,編寫簡單的http請求來測試;使用mockmvc進行,利用MockMvcResultHandlers.print()打印出執(zhí)行結(jié)果。
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes?=?MockServletContext.class)
@WebAppConfiguration
public?class?HelloWorldControlerTests?{
private?MockMvc?mvc;
@Before
public?void?setUp()?throws?Exception?{
????????mvc?=?MockMvcBuilders.standaloneSetup(new?HelloWorldController()).build();
????}
@Test
public?void?getHello()?throws?Exception?{
????mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
????????????????.andExpect(MockMvcResultMatchers.status().isOk())
????????????????.andDo(MockMvcResultHandlers.print())
????????????????.andReturn();
????}
}
另外,官方提供了一種比較新的注解測試方法,具體代碼參考如下:
@RunWith(SpringRunner.class)
@SpringBootTest
public?class?HelloWorldControlerTests?{
private?MockMvc?mvc;
@Before
public?void?setUp()?throws?Exception?{
????????mvc?=?MockMvcBuilders.standaloneSetup(new?HelloWorldController()).build();
????}
@Test
public?void?getHello()?throws?Exception?{
????mvc.perform(MockMvcRequestBuilders.get("/hello").accept(MediaType.APPLICATION_JSON))
????????????????.andExpect(MockMvcResultMatchers.status().isOk())
????????????????.andDo(MockMvcResultHandlers.print())
????????????????.andReturn();
????}
}
Spring Boot開發(fā)環(huán)境的調(diào)試
熱啟動(熱部署)在正常開發(fā)項目中已經(jīng)很常見了,雖然平時開發(fā)web項目過程中,改動項目重啟總是報錯;但Spring Boot對調(diào)試支持很好,修改之后可以實時生效,需要添加以下的配置:
<dependencies>
<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-devtools</artifactId>
??<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-maven-plugin</artifactId>
??<configuration>
??<fork>true</fork>
??</configuration>
</plugin>
</plugins>
</build>
注:該模塊在完整的打包環(huán)境下運行的時候會被禁用。如果你使用java -jar啟動應(yīng)用或者用一個特定的classloader啟動,它會認為這是一個“生產(chǎn)環(huán)境”。
關(guān)注:Java精選,公眾號專注程序員推送一些Java開發(fā)知識,包括基礎(chǔ)知識、各大流行框架(Mybatis、Spring、Spring Boot等)、大數(shù)據(jù)技術(shù)(Storm、Hadoop、MapReduce、Spark等)、數(shù)據(jù)庫(Mysql、Oracle、NoSQL等)、算法與數(shù)據(jù)結(jié)構(gòu)、面試專題、面試技巧經(jīng)驗、職業(yè)規(guī)劃以及優(yōu)質(zhì)開源項目等。其中一部分由小編總結(jié)整理,另一部分來源于網(wǎng)絡(luò)上優(yōu)質(zhì)資源,希望對大家的學(xué)習(xí)和工作有所幫助。
轉(zhuǎn)載自:素文宅博客