liquibase
liquibase 可以帮助我们完成数据库脚本的管理以及迁移(在支持的情况下),使用起来也是非常的简单,在我们的环境比较多的时候尤为方便,省去了每次变动都要手动更改不同环境数据库的麻烦。更多的内容可以参阅官方文档。
liquibase 支持读取四种格式的文件:sql、xml、yaml、json。这几种文件的编写格式需要遵循 liquibase 的 官方定义。具体的写法本文也不予讲解,查阅官文即可。
如果后期不更换数据库,那么直接使用 sql 是最直观方便的。倘若后续需要数据库迁移,那么可以使用后三种的方式定义,选择哪种格式看自己的喜好,也可以混合使用,都是支持的。
liquibase 不会自动将变更写入文件中,需要我们手动添加更改,然后在不同环境中启动时,liquibase 会自动执行这些变更完成结构和数据的同步。这也是 liquibase 的核心工作内容。
为当前项目引入 liquibase
本文使用 maven 的方式,且假设现有项目使用的 pg,准备迁移至其它数据库。其它的方式可以参看官方文档。
引入依赖填写必要信息
1 | <properties> |
打开命令行执行以下命令:
1 | # 只会导出表结构 |
这样当前数据库的 liquibase 脚本文件就生成了。我们将其放在 liquibase 的默认目录下 resourcces/db/changelog/
,后续有什么变动按照对应的语法更改一下,然后不同环境重新运行一下程序就可以完成结构和数据的同步了。
不同环境同步/迁移至其它数据库使用
上面的步骤中,我们将现有的项目使用的数据库进行了 liquibase 的脚本生成备份,我们需要将这些脚本文件用起来,同步到其它的环境中或者是迁移至其它数据库中。
引入的依赖和上面相同,但此时不需要 liquibase-maven-plugin
插件。如果是迁移到其它数据库,需要引入相应的数据库的驱动,并更改配置文件 appllication.yml
的 database 连接信息。
在项目的 resources
目录(也是 liquibase 默认读取的文件路径)中创建 db/changelog/db.changelog-master.yaml
文件,内容如下:
1 | databaseChangeLog: |
其中 changelog.xml
文件和 db.changelog-master.yaml
文件同级。然后启动我们的数据库即可完成同步/迁移。
注意:本文全篇不在
application.yml
中配置 liquibase 的任何信息,使用的都是 liquibase 默认读取的文件名(db.changelog-master.sql,yml,json,xml
)和路径名(resourcces/db/changelog
),如果需要自定义则需要更改相关配置。
默认的主文件名称必须是db.changelog-master.yaml
,后缀不可写成yml
。
目前,liquibase 的 gradle 使用方式是社区支持,如果想要更好、更及时的迁移,可以考虑使用 flyway。