又get一个有意思的东西。现在我只是会简单的使用。后面如果有深入了解也可以继续写。
官方文档:http://www.liquibase.org/documentation/changes/load_data.html
目录
1. LiquiBase
(1)pom.xml 导入依赖
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>3.5.3</version>
</dependency>
(2)master.xml
<?xml version="1.0" encoding="utf-8"?>
<databaseChangeLog
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
<include file="classpath:db.liquibase/changelog/initTable.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>
(3)编写表xml
changeSet 的id默认为新建时的当前日期(yyyyMMddHHmm)+00*,比如 201809190930001
<?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.4.xsd">
<property name="now" value="now()" dbms="mysql"/>
<changeSet id="201809191632" author="rookie">
<createTable tableName="art_accounts" remarks="测试">
<column name="id" type="bigint" autoIncrement="true" remarks="主键">
<constraints primaryKey="true" nullable="false"/>
</column>
</createTable>
</changeSet>
</databaseChangeLog>
(4)配置 application
spring.liquibase.change-log=classpath:db.liquibase/master.xml
2. 组件
createIndex: 创建索引
<createIndex tableName="ven_vendor_info" indexName="idx_vendor_id">
<column name="vendor_id" />
</createIndex>
modifyDataType: 修改数据类型
<modifyDataType tableName="atl_vendor_info" columnName="import_code" newDataType="varchar(50)" />
dropColumn: 删除列
<dropColumn tableName="atl_relation_vendor_company" columnName="is_deleted"/>
renameColumn: 重命名列
<renameColumn tableName="atl_vendor_type" oldColumnName="is_deleted" newColumnName="deleted"/>
renameTable:重命名表名
<renameTable oldTableName="atl_vendor_type" newTableName="ven_vendor_type"/>
dropNotNullConstraint:删除非空约束
<dropNotNullConstraint tableName="sys_workflow_transfer" columnName="end_date"/>
<addNotNullConstraint tableName="sys_workflow_transfer" columnName="start_date"/>
loadData: CSV文件中的数据加载到现有表
<comment>初始化sys_area</comment>
<loadData encoding="UTF-8"
file="config/liquibase/init/csv/sys_area.csv"
separator="|"
tableName="sys_area"/>
sys_area.csv:
id|code|name|type|parent_id
1|110000|北京|PROVINCE|0
2|CHN012000000|天津|PROVINCE|0
3|CHN013000000|河北省|PROVINCE|0
4|CHN014000000|山西省|PROVINCE|0
5|CHN015000000|内蒙古|PROVINCE|0
customChange: 通过cvs进行初始化数据。(可以同步不同环境数据)
<changeSet id="v.1.0.0_init_sysPage" author="rookie">
<comment>初始化页面</comment>
<customChange class="com.hand.hcf.core.handler.LiquibaseTaskChange">
<param name="serviceBeanName" value="initBaseDataClient"/>
<param name="paramClassName" value="com.hand.hcf.app.client.system.dto.PageListCO"/>
<param name="serviceMethodName" value="initPageList"/>
<param name="file" value="classpath:csv/init/sysPage.csv"/>
<param name="separator" value=","/>
</customChange>
</changeSet>
3.Exception
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1
type类型指定错误或者未指定。(请检查column字段是否完整、正确)