當前位置:
首頁 > 科技 > 如何快速構建一個 Spring Boot 工程?

如何快速構建一個 Spring Boot 工程?

作者 | 唐亞峰

責編 | 胡巍巍

Spring Boot 是為了簡化 Spring 應用的創建、運行、調試、部署等一系列問題而誕生的產物, 自動裝配的特性讓我們可以更好的關注業務本身而不是外部的 XML 配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 Web 工程。

未接觸 SpringBoot 之前,搭建一個普通的Web工程往往需要花費30分鐘左右,如果遇到點奇葩的問題耽擱的時間會更長一點,但自從用了 SpringBoot 後,真正體會到什麼叫分分鐘搭建一個Web,讓我擁有更多的時間跟我的小夥伴們嘮嗑了。

使用 SpringBoot 後發現一切是如此的簡單(還記得讀書那會被JAR包,XML 支配的恐懼嗎,如今都可以說 good bye)。


設計的目標

為所有使用 Spring 的開發者提供一個更簡單,快速的入門體驗;

提供一些常見的功能、如監控、Web 容器,健康,安全等功能;

幹掉 XML,遵循規範,開箱即用。


前提

SpringBoot 為我們提供了一系列的依賴包,所以需要構建工具的支持: Maven 或 Gradle。由於本人更習慣使用 Maven,所以後續案例都是基於 Maven 與 IntelliJ IDEA,同時這裡是基於最新的 SpringBoot2 編寫的哦......


創建項目

初次接觸,我們先來看看如何創建一個 SpringBoot項目,這裡以 IntelliJ IDEA為例,其他的IDE工具小夥伴們自行搜索創建方式。

創建完項目後,各位小夥伴請認真、細心的對比下與傳統的 Web 工程有何區別(如:目錄結構)。

點擊 File->Project

如果用過 Eclipse/IDEA 等工具的,對創建項目肯定不會陌生,但為了照顧第一次使用的我貼上了圖文。

選擇 Spring Initializr

到這一步選擇的時候,如圖中選項的是 Spring Initializr(官方的構建插件,需要聯網),第二個是自己選擇 Maven 構建,為了更好的適合初學者,我們將在本章用插件構建。

填寫項目基本信息

Group: 組織 ID,一般分為多個段,這裡我只說兩段,第一段為域,第二段為公司名稱。域又分為 org、com、cn等等,其中 org 為非營利組織,,com為商業組織。如阿里、淘寶(com.alibaba/com.taobao)。

Artifact:唯一標識符,一般是項目名稱。

擇包

Spring Initializr 為我們提供了很多的選項,不同的選項有不同的作用,在初期我們只需要依賴 Web->Web就可以了,選擇好依賴包之後點擊 Next -> Finish。


目錄結果

pom.xml 依賴

因為使用了 Spring Initializr 插件,所以如下的配置都不需要我們自己去寫啦,需要注意的是版本要選擇 RELEASE ,穩定版本 Bug 少。

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.battcn

chapter1

0.0.1-SNAPSHOT

jar

chapter1

我的用第一個SpringBoot工程

org.springframework.boot

spring-boot-starter-parent

2.0.1.RELEASE

UTF-8

UTF-8

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-maven-plugin

其它的依賴可以參考:官方文檔。


主函數入口

注意事項: 一個項目中切記不要出現多個 main 函數,否在在打包的時候 Spring-Boot-Maven-plugin 將找不到主函數(主動指定打包主函數入口除外......)。

/**

* 我的第一個SpringBoot程序

* 其中@RestController等同於 (@Controller與@ResponseBody)

*

*@authorLevin

*/

@RestController

@SpringBootApplication

publicclassChapter1Application{

publicstatic void main(String[] args) {

SpringApplication.run(Chapter1Application.class, args);

}

@GetMapping("/demo1")

publicString demo1() {

return"Hello battcn";

}

@Bean

publicCommandLineRunner commandLineRunner(ApplicationContext ctx) {

// 目的是

returnargs -> {

System.out.println("來看看 SpringBoot 默認為我們提供的 Bean:");

String[] beanNames = ctx.getBeanDefinitionNames();

Arrays.sort(beanNames);

Arrays.stream(beanNames).forEach(System.out::println);

};

}

}


初窺配置文件

從啟動日誌中可以發現, SpringBoot 默認的埠是 8080 ,那麼如果埠被佔用了怎麼辦呢?不要慌,問題不大,配置文件分分鐘解決你的困擾......

2018-04-2016:14:46.725INFO11184--- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat startedonport(s):8080(http)withcontext path""

修改默認配置。

再啟動一次看看日誌。

2018-04-2016:47:05.716INFO12108--- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat startedonport(s):9090(http)withcontext path"/chapter1"


測試

本次測試採用Junit 進行,當然也可以啟動項目後直接訪問 http://localhost:9090/chapter/demo1 進行測試。

importorg.junit.Before;

importorg.junit.Test;

importorg.junit.runner.RunWith;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.boot.test.context.SpringBootTest;

importorg.springframework.boot.test.web.client.TestRestTemplate;

importorg.springframework.boot.web.server.LocalServerPort;

importorg.springframework.http.ResponseEntity;

importorg.springframework.test.context.junit4.SpringRunner;

importjava.net.URL;

importstaticorg.junit.Assert.assertEquals;

@RunWith(SpringRunner.class)

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

publicclassChapter1ApplicationTests{

@LocalServerPort

privateintport;

privateURL base;

@Autowired

privateTestRestTemplate template;

@Before

publicvoidsetUp()throwsException{

// TODO 因為我們修改了 content-path 所以請求後面要帶上

this.base =newURL("http://localhost:"+ port +"/chapter1/demo1");

}

@Test

publicvoiddemo1()throwsException{

ResponseEntity response = template.getForEntity(base.toString(), String.class);

assertEquals(response.getBody(),"Hello battcn");

}

}


拓展知識

自定義Banner

SpringBoot 啟動的時候我們可以看到如下內容,這一塊其實是可以自定義的哦,而且在 2.X 版本中,它支持的格式從文本擴展到 banner.txt、banner.jpg、banner.gif、banner.jpeg 等等,只需要在 resouces 目錄下添加指定命名的文件即可。

. _________

/ / ___"_ __ _ _(_)_ __ __ _

( ( )___ | "_| "_|| "_ / _` |

/ ___)| |_)| || || || (_|| ) ) ) )

" |____| .__|_| |_|_||___, |// //

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v2.0.1.RELEASE)


總結

目前很多大佬都寫過關於 SpringBoot 的教程了,如有雷同,請多多包涵,本教程基於最新的 Spring-Boot-Starter-parent:2.0.1.RELEASE編寫,包括新版本的特性都會一起介紹...

作者:唐亞峰 | battcn。分享技術、記錄生活、專註 Spring Boot、Spring Cloud、微服務等技術分享,歡迎一起交流探討。從零開始、以實戰落地為主,不定期分享乾貨。漫漫架構之路,讓我們一起見證!

本文系作者投稿,版權歸作者所有。文章內容不代表CSDN立場。

蘋果手機的微信改版了,

想快速看到CSDN的熱乎文章,

趕快把CSDN公眾號設為星標吧,

打開公眾號,點擊「設為星標」就可以啦!

安卓手機的用戶,

點擊公眾號右上角小人,就可以置頂啦。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

微軟原生 Notepad 融入 VS Code 才是出路?
堅守普惠 AI,看華為雲如何讓 AI 落地!

TAG:CSDN |