Spring 5 (含 Spring MVC) 新手村起手式 — 小插曲 篇 之 設定系統啟動時的任務

Christy
appxtech
Published in
Feb 14, 2022

在上一篇 資料庫初體驗的內容裏,我們使用了Spring Boot支援的h2 資料庫。各位在測試的過程中,應(希)該(望)有注意到 每次專案如果在重新啟動後 資料庫裏的所有資料就會被清空。

那如果我們在開發程式的過程中,希望要有些資料可以存在db裏 方便測試的話 那有沒有辦法可以讓資料長久保存在db裏呢?!

答案當然是有的 ~~~

第一種就是安裝 正式的資料庫軟體,最常見的像是 MySQL, MS SQL Server, PostgreSQL 等等…

(*只是要經過一些安裝及設定步驟,有興趣的朋友可以留言讓我們知道)

第二種方式就是可以利用Spring Boot裏內建的機制 CommandLineRunner ,透過系統在每次啟動的時候執行我們指定的任務,也就是將db的資料在測試前,都先寫入一份在資料庫裏。

接著就來看詳細的步驟吧 ~

步驟一

建立一個新的Java類別(class),如下:

步驟二

套用@Component標籤 (org.springframework.stereotype.Component),並實作 CommandLineRunner 介面(interface)裏的 run (String… args)函式:

步驟三

一、在run函式裏撰寫相關任務的程式碼,如將資料寫入db。這邊讓我們沿用上一篇的資料模型MyUser 以及 MyUserRepository

完整的程式碼如下:

接著啟動專案,在專案執行的輸出視窗裏,也有出現相對應的文字:

最後,讓我們來看一下資料庫裏,是否真的會有這一筆資料:

Bingo ~ 專案啟動時 資料果然就會先寫入db
就可以接續後面的開發工作及測試囉~

總結

在這次的範例裏,我們有使用以下的標籤: annotation
 org.springframework.stereotype.Component @Component

透過Spring Core所提供的核心標籤 @Component以及CommandLineRunner介面,可以讓Spring底層自動在啟動的過程中來執行客制化的任務,如 寫入資料到db,開啟設定檔 等等

其實Spring Batch底層機制也是透過 CommandLineRunner 的方式來達到 ~
想多了解一點的朋友可以參考官方文件及試試下面的練習喔!

練習

一、請試著依上述例子,加上 另一個全新的任務,如 SecondDataLoader,並確認能正常執行及輸入:

二、一、如果希望 SecondDataLoader 一定要出現在第一行,比 testing run() 早執行的話,該如何達到呢?! 如下圖

--

--