有很多網友會時不時的問我,spring boot項目如何測試,如何部署,在生産中有什麼好的部署方案嗎?這篇文章就來介紹一下spring boot 如何開發、調試、打包到最後的投産上線。
在開發階段的時候最重要的是單元測試了,springboot對單元測試的支援已經很完善了。
1、在pom包中添加spring-boot-starter-test包引用
2、開發測試類
以最簡單的helloworld為例,在測試類的類頭部需要添加:<code>@runwith(springrunner.class)</code>和<code>@springboottest</code>注解,在測試方法的頂端添加<code>@test</code>即可,最後在方法上點選右鍵run就可以運作。
實際使用中,可以按照項目的正常使用去注入dao層代碼或者是service層代碼進行測試驗證,spring-boot-starter-test提供很多基礎用法,更難得的是增加了對controller層測試的支援。
引入了<code>mockmvc</code>支援了對controller層的測試,簡單示例如下:
單元測試是驗證你代碼第一道屏障,要養成每寫一部分代碼就進行單元測試的習慣,不要等到全部內建後再進行測試,內建後因為更關注整體運作效果,很容易遺漏掉代碼底層的bug.
整體開發完成之後進入內建測試,spring boot項目的啟動入口在 application類中,直接運作run方法就可以啟動項目,但是在調試的過程中我們肯定需要不斷的去調試代碼,如果每修改一次代碼就需要手動重新開機一次服務就很麻煩,spring boot非常貼心的給出了熱部署的支援,很友善在web項目中調試使用。
pom需要添加以下的配置:
添加以上配置後,項目就支援了熱部署,非常友善內建測試。
其實我覺得這個階段,應該還是比較簡單一般分為兩種;一種是打包成jar包直接執行,另一種是打包成war包放到tomcat伺服器下。
如果你使用的是maven來管理項目,執行以下指令既可以
打包完成後jar包會生成到target目錄下,命名一般是 項目名+版本号.jar
啟動jar包指令
這種方式,隻要控制台關閉,服務就不能通路了。下面我們使用在背景運作的方式來啟動:
也可以在啟動的時候選擇讀取不同的配置檔案
gradle
如果使用的是gradle,使用下面指令打包
打成war包一般可以分兩種方式來實作,第一種可以通過eclipse這種開發工具來導出war包,另外一種是使用指令來完成,這裡主要介紹後一種
1、maven項目,修改pom包
将
改為
2、打包時排除tomcat.
在這裡将scope屬性設定為provided,這樣在最終形成的war中不會包含這個jar包,因為tomcat或jetty等伺服器在運作時将會提供相關的api類。
3、注冊啟動類
建立servletinitializer.java,繼承springbootservletinitializer ,覆寫configure(),把啟動類application注冊進去。外部web應用伺服器建構web application context的時候,會把啟動類添加進去。
最後執行
會在target目錄下生成:項目名+版本号.war檔案,拷貝到tomcat伺服器中啟動即可。
如果使用的是gradle,基本步奏一樣,build.gradle中添加war的支援,排除spring-boot-starter-tomcat:
再使用建構指令
war會生成在build\libs 目錄下。
可以根據java自帶的jinfo指令:
來檢視jar 啟動後使用的是什麼gc、新生代、老年代分批的記憶體都是多少,示例如下:
<code>-xx:cicompilercount</code> :最大的并行編譯數
<code>-xx:initialheapsize</code> 和 <code>-xx:maxheapsize</code> :指定jvm的初始和最大堆記憶體大小
<code>-xx:maxnewsize</code> : jvm堆區域新生代記憶體的最大可配置設定大小
…
<code>-xx:+useparallelgc</code> :垃圾回收使用parallel收集器
簡單粗暴
直接kill掉程序再次啟動jar包
當然這種方式比較傳統和暴力,是以建議大家使用下面的方式來管理
腳本執行
如果使用的是maven,需要包含以下的配置
如果使用是gradle,需要包含下面配置
做一個軟連結指向你的jar包并加入到<code>init.d</code>中或者将jar包封裝成一個服務來管理。
init.d 例子:
這樣就可以使用<code>stop</code>或者是<code>restart</code>指令去管理你的應用。
或者添加腳本,将jar包注冊為服務
到此 springboot項目如何測試、聯調和打包投産均已經介紹完,以後可以找時間研究一下springboot的自動化運維,以及spring boot 和docker相結合的使用。
<a href="https://github.com/ityouknow/spring-boot-starter">示例代碼</a>
作者:純潔的微笑
版權歸作者所有,轉載請注明出處