名词解释: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镜像搞定一切,随时随地随意构建新环境!” ,这是最开心的方式,现在许多软件产品都是运行一个镜像即可。
“ 懒 “ 出新境界吧!