歡迎訪問陳同學博客原文
名詞解釋:Lookup 指數據字典,常用於表示狀態,應用中通常爲枚舉類,頁面上可作爲下拉框的數據源。
本文以一個小故事分享基礎數據維護的一些事。
痛苦的原始生活
晚上九點,程序在生產環境部署完成,小A終於歇了口氣,開始按順序把各種基礎數據錄入系統。
- 錄入新菜單
- 錄入新接口
- 錄入Lookup
- …
重複着 Control C/V ,小A回想起開發 F功能 時的場景,真是慘不忍睹。
“擦,功能簡單至極,卻有5個Lookup,每個Lookup居然有十幾個項”,瞄完功能文檔後,小A痛不欲生。
好吧!又能怎樣呢?
吭哧吭哧創建了5個枚舉類,完成CRUD,痛苦的把Lookup維護到待發布文檔中。
接着,收集本次變更的接口。“POST請求,URI 是 /examples ……” ,小A唸叨着。
偷個懶吧
“開發時要維護,打斷思緒,影響心情;發佈時要複製粘貼,浪費時間。要是哪天漏維護,生產環境指不定還能生個阿哥。總這麼搞也不是事呀!”。睡在牀上,小A思考着。
“乾脆按規定格式維護到Excel裏吧,寫個導入程序,發佈時抓Excel數據然後自動導進DB。雖然開發時仍然要維護,但起碼發佈時輕鬆很多”。
第二天,設計完 Excel 中的數據結構,幾個小時後,小A快速完成了開發。錄入些基礎數據,測試一把,基礎數據自動進入DB,爽歪歪!
向小夥伴介紹完如何維護數據之後,小A期待着下次發佈的到來!
“哈哈哈哈,得虧我機智!”。兩週後,看着滿屏待維護的基礎數據,小A樂的合不攏嘴。
幾十秒,基礎數據 “刷刷刷” 自動導入了DB,Perfect!
剎不住的"懶車"
眨眼過去一個月,雖然發佈輕鬆一些,但平時反人類的維護工作還是歷歷在目。
上班路上,小A想着:“還能不能讓我安心的幹活了,非得搞定你不可”。
作爲 Java 程序小哥,小A自然知道 Spring 的 XML 維護時代、註解標記時代、Spring Boot 自動搞定各種體力勞動的奇妙,小A又回想起開發時的一些細節。
XML 手工定義 Bean,繁瑣不說,還容易把class維護錯。基礎數據也一樣,繁瑣,容易錯,還容易漏。
<bean id="userService" class="com.example.UserService"/>
JavaConfig 方式果然爽,coding的方式還是舒服很多!
@Configuration
public class UserConfiguration {
@Bean
public UserService userService {
return new UserService();
}
}
掃描並自動注入真贊!通過 @Service 標記,它成了爲類的屬性,UserService 就可以被自動處理了,完美呀!
@Service
public class UserService {}
我能不能也搞個掃描,然後加載到DB呢?關於Lookup,小A立馬構思了一個方案,聯想到了案例。
@Lookup
public class UserStatus {
ACTIVE("ACTIVE", "正常"),
INACTIVE("INACTIVE", "註銷"),
FROZEN("FROZEN", "凍結");
}
- Lookup 是枚舉類,定義
@Lookup
註解,爲類打上標記 - 構建時利用 maven 掃描特定 package,收集
@Lookup
標記的數據,打成json文件放到jar包中 - 部署時利用程序讀取json文件數據並導入到DB
- 應用運行後自動讀取基礎數據,解析並加載
由於實現很簡單,小A慢慢的完成了設計和開發工作,各種基礎數據也逐漸被處理掉,筒子們從此可以專心的幹活。
後記
技術設計、開發、測試、部署過程中,會有許多臃腫、痛苦卻無法避免的維護工作。這些工作需要開發規範來約定,codereview 人員需要經常提醒新人,卻也會忘記維護,偶爾也會維護出錯,在構建新環境時還要處理一大堆額外維護工作。
許多元數據就在程序中,有的也是跟着開發步驟走,比如:
- 利用Liquibase腳本來處理DB對象,腳本在部署包中
- 利用 Swagger 來標記接口,定製開發,自動收集並導入DB
- 利用自定義註解來處理 Lookup 等類似的數據,自動收集並導入DB
"利用安裝介質,一鍵部署,一個Docker鏡像搞定一切,隨時隨地隨意構建新環境!",這是最開心的方式,現在許多軟件產品都是運行一個鏡像即可。
“懶” 出新境界吧!
歡迎關注陳同學的公衆號,一起學習,一起成長