利用Maven入手Spring Boot第一個(gè)程序詳解
前言
學(xué)習(xí)一個(gè)新技術(shù),先別管他的原理啊,流程啊,怎么組織代碼啊什么的。直接從官網(wǎng)或者博客抄一個(gè)小demo,自己親自跑一遍,然后再去看那一堆讓人頭皮發(fā)麻的講解,就能相對(duì)容易的看懂了。
目前網(wǎng)上有不少Spring Boot的入門文章,都很有幫助,本人最近在深入學(xué)習(xí)Spring Cloud,在搭建第一個(gè)Hello World程序時(shí),感覺(jué)對(duì)于新手而言,介紹文章怎么詳細(xì)都不為過(guò),因?yàn)槠渲锌硬簧伲赃@里就把第一次實(shí)踐的步驟貼出來(lái),以求和大家一起進(jìn)步。
1、Maven是什么?能帶來(lái)什么幫助?
我們?cè)谟肊clipse開(kāi)發(fā)項(xiàng)目時(shí),一定會(huì)引入支持特定功能的jar包,比如從下圖里,我們能看到這個(gè)項(xiàng)目需要引入支持mysql的jar包。
從上圖里我們能看到,支持mysql的jar包是放在本地路徑里,這樣如果在本地運(yùn)行自然是沒(méi)問(wèn)題了。但如果我們要把這個(gè)項(xiàng)目發(fā)布到服務(wù)器上,就會(huì)有問(wèn)題了,因?yàn)樵谶@個(gè)項(xiàng)目的.classpath文件,已經(jīng)指定mysql的jar包在本地d盤下的某個(gè)路徑,如下圖所示。
一旦發(fā)布到服務(wù)器上,項(xiàng)目依然會(huì)根據(jù).classpath的配置,從d盤下這個(gè)路徑去找,事實(shí)上服務(wù)器上是不可能有這樣的路徑和jar包的。
我們也可以通過(guò)在.classpath里指定相對(duì)路徑來(lái)解決這個(gè)問(wèn)題,在下面的代碼里,我們可以指定本項(xiàng)目將引入“本項(xiàng)目路徑/WebRoot/lib“目錄里的jar包。
<classpathentry kind="lib" path="WebRoot/lib/jar包名.jar"/>
這樣做,發(fā)布到服務(wù)器時(shí),由于會(huì)把整個(gè)項(xiàng)目路徑里的文件都上傳,所以不會(huì)出錯(cuò)。但這樣依然會(huì)給我們帶來(lái)不便。比如這個(gè)服務(wù)器上我們部署了5個(gè)項(xiàng)目,它們都會(huì)用到這個(gè)mysql支持包,這樣我們就不得不把這個(gè)jar包上傳5次,再擴(kuò)展一下,如果5個(gè)項(xiàng)目里會(huì)用到20個(gè)相同的jar包,那么我們還真就不得不做多次復(fù)制。如果我們要升級(jí)其中的一個(gè)jar包,那么還真就得做很多重復(fù)的復(fù)制粘貼動(dòng)作。
期望中的工作模式應(yīng)該是,應(yīng)該有個(gè)“倉(cāng)庫(kù)“同一放置所有的jar包,在開(kāi)發(fā)項(xiàng)目時(shí),可以通過(guò)配置文件引入必要的包,而不是把包復(fù)制到本項(xiàng)目里。這就是Maven的做法。
用通俗的話來(lái)講,Maven是套Eclipse的插件,它的核心價(jià)值是能理順項(xiàng)目間的依賴關(guān)系,具體來(lái)講,能通過(guò)其中的pom.xml配置文件來(lái)統(tǒng)一管理本項(xiàng)目所要用到的jar包,在項(xiàng)目里引入Maven插件后,開(kāi)發(fā)者就不必手動(dòng)添加jar包了,這樣也能避免因此來(lái)帶來(lái)的一系列問(wèn)題。
2、通過(guò)Maven開(kāi)發(fā)Spring Boot的HelloWorld程序
第一步,創(chuàng)建Maven項(xiàng)目。本書使用MyEclipse作為開(kāi)發(fā)環(huán)境,在其中已經(jīng)引入了Maven插件,所以我們可以通過(guò)“File”->”New”菜單,如下圖所示,直接創(chuàng)建Maven項(xiàng)目。
在上圖里,點(diǎn)擊“Next”按鈕后,會(huì)見(jiàn)到如下圖所示的界面,在其中我們可以設(shè)置Group Id等屬性。
其中,Group Id代表公司名,這里設(shè)置成“com.springBoot”,而Artifact Id則是項(xiàng)目名,Version和Packag采用默認(rèn)值。完成設(shè)置后,能看到新建的項(xiàng)目MyFirstSpringBoot
第二步,改寫pom.xml。當(dāng)我們創(chuàng)建好Maven項(xiàng)目后,能看到pom.xml文件。在Maven項(xiàng)目里,一般是通過(guò)pom.xml來(lái)指定本項(xiàng)目的基本信息以及需要引入的jar包,這里的關(guān)鍵代碼如下。
<groupId>com.springboot</groupId> <artifactId>MyFirstSpringBoot</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>MyFirstSpringBoot</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>1.5.4.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependencies>
其中,第1到第4行的代碼是自動(dòng)生成的,用來(lái)指定本項(xiàng)目的基本信息,這和我們?cè)谥皠?chuàng)建Maven項(xiàng)目時(shí)所填的信息是一致的。
從第7到第19行的dependencies屬性里,我們可以指定本項(xiàng)目所用到的jar包,這里在第8和第13行分別通過(guò)兩個(gè)dependency來(lái)指定該引入兩類jar包。其中從第8到12行,指定了需要引入用以開(kāi)發(fā)Spring Boot項(xiàng)目的名為spring-boot-starter-web的jar的集合,而在第13到18行,指定了需要引入用以單元測(cè)試的junit包。
從中上述代碼里,我們能見(jiàn)到通過(guò)Maven管理項(xiàng)目依賴文件的一般方式,比如在下面的代碼片段里,是通過(guò)第2到第4行的代碼,說(shuō)明需要引入org.springframework.boot這個(gè)公司組織(發(fā)布Spring Boot jar包的組織)發(fā)布的名為spring-boot-starter-web的一套支持Spring Boot的jar包,而且通過(guò)第4行指定了引入包的版本號(hào)是1.5.4.RELEASE。
這樣一來(lái),在本項(xiàng)目里,我們就無(wú)需在本地在手動(dòng)地添加jar包,這些包事實(shí)上是在遠(yuǎn)端的倉(cāng)庫(kù)里,我們這個(gè)項(xiàng)目是通過(guò)pom.xml的配置,來(lái)指定需要引入這些包。
第三步,改寫App.java。
在創(chuàng)建Maven項(xiàng)目時(shí),我們指定的package是com.springboot.MyFirstSpringBoot,在其中會(huì)有個(gè)App.java,我們把這個(gè)文件改寫成如下的樣式。
package com.springboot.MyFirstSpringBoot; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SpringBootApplication public class App { @RequestMapping("/HelloWorld") public String sayHello() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(App.class, args); } }
由于是第一次使用Maven,我們?cè)谶@里再?gòu)?qiáng)調(diào)一次,雖然我們沒(méi)有在項(xiàng)目里手動(dòng)地引入jar,但由于在pom.xml里指定了待引入的依賴包,具體而言需要依賴org.springframework.boot組織所提供的spring-boot-starter-web,所以在代碼的第2到第5行里,我們可以通過(guò)import語(yǔ)句,使用spring-boot-starter-web(也就是Spring Boot)的類庫(kù)。
在第8行里,我們引入了@SpringBootApplication注解,以此聲明該類是個(gè)Spring Boot的應(yīng)用。在第10到第13行里,我們通過(guò)@RequestMapping,指定了用于處理/HelloWorld請(qǐng)求的sayHello方法,在第14行的main函數(shù)里,我們通過(guò)第15行的代碼啟動(dòng)了Web服務(wù)。
至此我們完成了代碼編寫工作。啟動(dòng)MyFirstSpringBoot項(xiàng)目里的App.java,在瀏覽器里輸入http://localhost:8080/HelloWorld。由于/HelloWorld請(qǐng)求能被第11到13行的sayHello方法的@RequestMapping對(duì)應(yīng)上,所以會(huì)通過(guò)sayHello方法輸出Hello World!的內(nèi)容,如下圖所示。
從這個(gè)程序里我們能體會(huì)到開(kāi)發(fā)Spring Boot和傳統(tǒng)Spring程序的不同。
第一,在之前的Spring MVC框架里,我們不得不在web.xml定義采用Spring的監(jiān)聽(tīng)器,而且為了采用@Controller控制器類,我們還得加上一大堆配置,但在Spring Boot里,我們只需要添加一個(gè)@SpringBootApplication注解。
第二,我們往往需要把傳統(tǒng)的Spring MVC項(xiàng)目發(fā)布到諸如Tomcat的Web服務(wù)器上,啟動(dòng)Web服務(wù)器后我們才能在瀏覽器里輸入請(qǐng)求查看運(yùn)行的效果,這里我們只需啟動(dòng)App.java這個(gè)類即可達(dá)到類似的效果,就可以省去部署到Web服務(wù)器上的步驟。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- Spring Boot右鍵maven build成功但是直接運(yùn)行main方法出錯(cuò)的解決方案
- 只需兩步實(shí)現(xiàn)Eclipse+Maven快速構(gòu)建第一個(gè)Spring Boot項(xiàng)目
- maven+springboot打成jar包的方法
- spring-boot-maven-plugin 插件的作用詳解
- SpringBoot+Maven 多模塊項(xiàng)目的構(gòu)建、運(yùn)行、打包實(shí)戰(zhàn)
- Spring Boot+maven打war包的方法
- Spring Boot Maven 打包可執(zhí)行Jar文件的實(shí)現(xiàn)方法
- Spring Boot maven框架搭建教程圖解
相關(guān)文章
SpringMVC HttpMessageConverter報(bào)文信息轉(zhuǎn)換器
??HttpMessageConverter???,報(bào)文信息轉(zhuǎn)換器,將請(qǐng)求報(bào)文轉(zhuǎn)換為Java對(duì)象,或?qū)ava對(duì)象轉(zhuǎn)換為響應(yīng)報(bào)文。???HttpMessageConverter???提供了兩個(gè)注解和兩個(gè)類型:??@RequestBody,@ResponseBody???,??RequestEntity,ResponseEntity??2023-01-01mybatis入門_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了mybatis入門的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09如何使用lamda表達(dá)式對(duì)list進(jìn)行求和
這篇文章主要介紹了如何使用lamda表達(dá)式對(duì)list進(jìn)行求和問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06springboot+mybatis-plus實(shí)現(xiàn)內(nèi)置的CRUD使用詳解
這篇文章主要介紹了springboot+mybatis-plus實(shí)現(xiàn)內(nèi)置的CRUD使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12使用MyBatis-Plus實(shí)現(xiàn)聯(lián)表查詢分頁(yè)的示例代碼
本文主要講述了如何在SpringBoot項(xiàng)目中使用MyBatis-Plus的分頁(yè)插件,通過(guò)這個(gè)示例,可以學(xué)會(huì)如何利用MyBatis-Plus進(jìn)行高效的分頁(yè)查詢,感興趣的可以了解一下2024-10-10springboot攔截器不攔截靜態(tài)資源,只攔截controller的實(shí)現(xiàn)方法
這篇文章主要介紹了springboot攔截器不攔截靜態(tài)資源,只攔截controller的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java之MultipartFile和File類型互轉(zhuǎn)方式
這篇文章主要介紹了Java之MultipartFile和File類型互轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09詳解SpringBoot結(jié)合swagger2快速生成簡(jiǎn)單的接口文檔
這篇文章主要介紹了詳解SpringBoot結(jié)合swagger2快速生成簡(jiǎn)單的接口文檔,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05