1、组织好changelog
- 有1个主入口配置文件。引入各个版本的配置文件。
- 每个版本一个配置文件。并保持格式的统一
目录结构
db.changelog-master.xml
db.changelog-1.0.xml
db.changelog-1.1.xml
changelog-master.xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
<include file="com/example/db/changelog/db.changelog-1.0.xml"/>
<include file="com/example/db/changelog/db.changelog-1.1.xml"/>
<include file="com/example/db/changelog/db.changelog-2.0.xml"/>
</databaseChangeLog>
db.changelog-1.0.xml文件内容
<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
<changeSet author="authorName" id="changelog-1.0">
<createTable tableName="TablesAndTables">
<column name="COLUMN1" type="TEXT">
<constraints nullable="true" primaryKey="false" unique="false"/>
</column>
</createTable>
</changeSet>
</databaseChangeLog>
2、用单独的文件配置存储过程,并且使用runOnChange="true"
配置,即有改动则重新运行,不受md5限制。
3、每条changeSet只包含1个sql语句执行。这样可以快速排查哪个sql出了问题,并且在自动提交失效时,数据库处在无法预测的状态。
4、选择合适的id,使用顺序号,或者表名+操作。
5、使用comments
标签,说明changeSet内sql的作用
6、每个changeSet均添加<rollback>
标签,必要时可以回滚。
7、必要时使用环境量 contexts,区分生产和开发环境
8、在协同开发时,表的修改会引起冲突,导致项目无法启动。可以使用配置spring.liquibase.enabled=false
关闭liquibase的执行。也可以使用spring.liquibase.drop-first=true
删除表后重建,但记得和同事协商好,不然他可能会扁你。
9、配置文件统一使用xml格式,这是liquibase下最好用的配置。
10、尽量不使用sql标签。使用xml配置编写,对自增的使用使用常用的配置(例如不使用pg的serial格式用type="INT" autoIncrement="true" startWith="1" incrementBy="1"
)这样可以兼容更多的数据库。
11、每个版本的文件最后都打上版本标签,这样可以在需要回退时,可以回退到指定版本。
12、在开发时使用spring.liquibase.test-rollback-on-update=true
验证回退是否正确,专治复制粘贴党。
13、在大数据量导入时(如数据字典)使用changeSet下的loadData
或loadUpdateData
进行导入csv文件,高效又方便。
14、尽量不使用insert
,update
标签操作数据。