如何快速構建一個 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公眾號設為星標吧,
打開公眾號,點擊「設為星標」就可以啦!
安卓手機的用戶,
點擊公眾號右上角小人,就可以置頂啦。
※微軟原生 Notepad 融入 VS Code 才是出路?
※堅守普惠 AI,看華為雲如何讓 AI 落地!
TAG:CSDN |