在上一篇 資料庫初體驗的內容裏,我們使用了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() 早執行的話,該如何達到呢?! 如下圖