在企业开发中,数据库版本管理好像是一个伪命题,大多项目都是通过PowerDesigner之类的工具建模、生成SQL语句,然后去数据库中执行。在开发过程中如果遇到修改表结构,再补充修改表结构的语句,大家依次去执行,在本地及各个环境中同步表结构。但这种模式,在我参与过的项目中或多或少都出现过问题:忘记同步表结构,导致在服务启动或运行时出错。
1Liquibase介绍
SpringBoot官方文档中推荐了两款工具来管理数据库版本:Flyway和Liquibase。前者我没有在项目中使用过,所以本文就只讨论Liquibase。
使用Liquibase需要定义一堆XML文件,这些XML称为changelog文件。每个changelog文件中又包含多个变化集合changeSet,每个changeSet记录了作者、改变的内容。changeSet中要修改的内容,通过createTable、addColumn等标签进行操作。通过这种XML文件的方式,就可以将代码版本与数据库版本关联在一起。项目启动,会自动执行changelogXML文件。Liquibase具有执行锁,已经执行过的内容不会重复执行。在执行changeSet时,由于改动的内容可以通过Liquibase提供的标签编写,所以无关具体的数据库产品(MySQL、Oracle等),Liquibase底层会根据实际使用的数据库类型转化为对应的SQL。
通过上面的描述,可以看出Liquibase带来的几个好处:
支持多类型的数据库产品,无需维护SQL脚本;
项目启动可以自动升级数据库;
代码版本与数据库版本关联在一起。
2在老项目中使用Liquibase
在咱们的demohero-springboot-demo中,之前已经手动通过SQL语句创建了数据库表