Spring Boot從入門到精通(一)搭建第一個Spring Boot程序

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)載自:素文宅博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容