概述
與一些動態語言(如ruby、groovy、node.js)相比,java開發顯得異常笨重。接觸過外包項目的朋友也有所了解,如果要開發一個小型項目,首選的編程語言并不是java,而是php。為什么呢?因為開發起來快!目前很多大型互聯網公司的早起編程語言都是類似php這種能夠快速開發的語言。
既然問題出現了,那必然有解決問題的方案,springboot做到了。springboot是由pivotal公司所屬團隊研發,該公司的企業宗旨為:
致力于“改變世界構造軟件的方式(we are transforming how the world builds software)”,提供云原生應用開發 paas 平臺及服務,幫助企業客戶采用敏捷軟件開發方法論,從而提高軟件開發人員工作效率、減少運維成本,實現數字化轉型、it 創新,并最終實現業務創新。
springboot讓我們可以在幾分鐘內就搭建出一套項目的基礎架構,同時為我們提供了大量集成方案——starters。基于“約定優于配置”的理念,減少大量的配置文件,讓項目快速、簡單的運行起來。內置web容器(如tomcat、netty等),通過jar -jar命令即可啟動一個項目。
項目創建
環境要求
采用springboot最新版本2.1.3來講解。我們使用maven項目管理工具來管理項目,電腦上要預先安裝好maven3.3+(springboot要求)版本。jdk當然也少不了,但需要jdk8及以上版本。
創建項目方式一
通過官網提供的spring initializr來創建項目。訪問官方網址:https://start.spring.io/ 。顯示內容如下:
簡單了解一下相應的參數選擇:
- project:選擇項目構建的工具,采用默認的maven;
- language:選擇構建項目的語言,采用默認的java;
- spring boot:選擇使用的springboot的版本信息,采用最新版本2.1.3;
- project metadata:設置項目的元數據,主要就是設置maven相關的配置;group,對應maven中的groupid,artifact對應maven中的artifactid。
打開more options會看到另外一些默認的配置:
- packaging:指定打包的模式,默認采用jar包模式,即使用java -jar啟動即可,如果需要部署到單獨的tomcat或其他web容器,則可選擇war包。
- java version:springboot2.13默認支持最低jdk為8。
我們前面提到的starters的選擇就是在dependencies中設置,在沒有輸入任何內容的時候,能夠看到該輸入欄目有對應的提示信息。當輸入web時,會動態匹配與web相關的依賴,點擊“?”添加即可。這里選擇web的最小化配置。
當完成選擇,點擊“generate project”即可自動下載創建好的項目代碼。解壓之后,會看到是一個標準的maven項目,使用idea等ide引入maven項目,自動加載依賴即可,這里不再贅述。
創建項目方式二
第二種創建方式就是直接使用idea進行創建,當然前提是idea中已經安裝了spring boot相關的插件——spring boot,如下圖所示。
像創建其他項目一樣,file,new,project…,即可進入創建項目頁面,如下圖:
選擇spring initializr,展示右邊基礎配置項。我們會發現,其實此插件進行創建時默認也是調用官方提供的網址進行創建。選擇jdk8,點擊下一步。
像第一種方式一樣,填寫相關參數信息,這里就不再重復描述。點擊“next”,進入選擇依賴界面。點擊“web”,同時勾選中間部分出現的“web”。能夠看到下面出現了“servlet web application with spring mvc and tomcat”,因此,項目已經具有了springmvc框架和tomcat內置web容器了。
當然,如果項目需要,也可以選擇添加更多相關依賴。完成依賴選擇之后,點擊“next”,指定項目的名稱和位置,點擊“finish”,等待項目構建完成即可。根據網絡速度,等待時間有所不同,當添加依賴jar包一直卡著不動時,可考慮關閉項目重新打開,手動“reimport”一下maven依賴。
項目目錄結構
項目完成創建之后,來看一下目錄結構:
項目目錄結構簡單明了,就是一個普通的maven項目。src/main/java目錄下為項目的啟動程序和后續需要編寫的業務代碼。resources目錄存放配置文件和資源文件,如web項目的js、css、image、jsp等。test目錄存放單元測試類。
配置文件
在常規spring構建的web項目中的配置文件,比如spring-content.xml、web.xml等配置文件都不見了。能夠看到的只有application.properties,它默認內置了一些配置,可以通過idea的提示功能,快速配置相應的參數,比如在文件內入手server,則會給出如下提示:
通過提示可以看出,內嵌tomcat默認的端口為8080。可以通過server.port=xx,重新指定端口號。
項目依賴
在之前的spring項目搭建我們需要了解每個功能都使用了spring的哪些核心依賴包,然后逐一引入。使用spring boot便無需關注那么多。來看一下pom.xml文件內容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?xml version= "1.0" encoding= "utf-8" ?> <project xmlns= "http://maven.apache.org/pom/4.0.0" xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation= "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" > <modelversion> 4.0 . 0 </modelversion> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version> 2.1 . 3 .release</version> <relativepath/> <!-- lookup parent from repository --> </parent> <groupid>com.example</groupid> <artifactid>demo</artifactid> <version> 0.0 . 1 -snapshot</version> <name>demo</name> <description>demo project for spring boot</description> <properties> <java.version> 1.8 </java.version> </properties> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project> |
看到pom里面的內容是不是感覺清爽到極致了。是的,忽略掉maven的元數據配置,其實我們僅僅引入了三部分的內容:
parent元素,引入了spring-boot-starter-parent的依賴管理,主要提供了整體版本控制和打包等內容;
dependencies元素中,引入了spring-boot-starter-web這個starter和單元測試的starter。
build元素中,引入了一個構建項目的maven插件。
而此刻,如果打開項目的jar包依賴,會看到已經引入了幾十個功能相關的jar包了。
helloworld
編寫一個可通過瀏覽器訪問的hello web程序。在com.example.demo包下創建一個controller的包,并創建helloworldcontroller類。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
package com.example.demo.controller; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller; /** * @author zzs */ @restcontroller public class helloworldcontroller { @requestmapping public string hello() { return "hello world!" ; } } |
像我們使用spring mvc一樣,在controller中實現上面的代碼。運行demoapplication中的main方法啟動項目,在瀏覽器輸入:http://localhost:8080/hello,頁面顯示出”hello world!”,一個簡單的rest接口請求便完成了。
單元測試
在demoapplicationtests中寫一段簡單的單元測試,代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package com.example.demo; import com.example.demo.controller.helloworldcontroller; import org.junit.before; import org.junit.test; import org.junit.runner.runwith; import org.springframework.boot.test.context.springboottest; import org.springframework.http.mediatype; import org.springframework.test.context.junit4.springrunner; import org.springframework.test.web.servlet.mockmvc; import org.springframework.test.web.servlet.request.mockmvcrequestbuilders; import org.springframework.test.web.servlet.setup.mockmvcbuilders; import static org.hamcrest.core.isequal.equalto; import static org.springframework.test.web.servlet.result.mockmvcresultmatchers.content; import static org.springframework.test.web.servlet.result.mockmvcresultmatchers.status; @runwith (springrunner. class ) @springboottest public class demoapplicationtests { private mockmvc mockmvc; @before public void init() { mockmvc = mockmvcbuilders.standalonesetup( new helloworldcontroller()).build(); } @test public void testhello() throws exception { mockmvc.perform(mockmvcrequestbuilders.get( "/hello" ).accept(mediatype.application_json)) .andexpect(status().isok()) .andexpect(content().string(equalto( "hello world!" ))); } } |
注意事項
至此,已經完成了springboot最基本的項目已經完成。這里再補充兩條注意事項:
1、業務代碼和新建的package一定要放在啟動main方法的同級包下或下一級包下面,也就是說springboot的啟動程序一定要在最頂層,否則啟動時某些注解無法檢測到。
2、如果業務中有其他的類中有main方法,注意注釋掉或替換為單元測試的形式,因為springboot在啟動時會尋找main方法,如果存在多個在使用java -jar啟動時會出現莫名其妙的問題。
項目源代碼:https://github.com/secbr/springboot-all/tree/master/demo
以上所述是小編給大家介紹的5分鐘快速上手spring boot詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!
原文鏈接:https://blog.csdn.net/wo541075754/article/details/88945215