Liquibase入门
由于在使用Libreplan时依赖了LiquiBase,故简单记录下LiquiBase的使用。
一、简介
LiquiBase是一个用于数据库重构和迁移的开源工具,通过日志文件的形式记录数据库的变更,之后可以执行日志文件中的修改(Update
、Rollback
等),将数据库更新或回滚到一致的状态。
二、安装
-
安装Java
-
下载Liquibase并解压
-
下载数据库驱动
此处以H2为例,下载H2 JDBC Driver,将
H2/bin
目录下的h2*.jar
复制到Liquibase的解压目录 -
配置
liquibase.properties
在Liquibase的解压目录下创建
liquibase.properties
文件并添加以下内容:driver: org.h2.Driver classpath: ./h2-1.4.199.jar url: jdbc:h2:file:./h2tutorial username: admin password: password changeLogFile: myChangeLog.xml
三、入门
1、脚本方式
- 创建SQL目录
在Liquibase的解压目录下创建sql
目录来放置Liquibase用来跟踪和部署等的SQL脚本文件。
- 创建
ChangeLog
配置文件
在Liquibase的解压目录下创建ChangeLog的配置文件:myChangeLog.xml
,在此配置文件中配置SQL脚本所在目录,内容如下:
<?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.1.xsd">
<includeAll path="/sql"/>
</databaseChangeLog>
- 添加SQL脚本
Liquibase会按sql目录中的脚本字母数字顺序排序执行。在sql目录下创建001_create_person_table.sql
文件,内容如下:
create table PERSON (
ID int primary key,
FNAME varchar(100) not null,
);
- 部署
在命令行中切换到当前目录下执行liquibase.bat update
:
- 检查结果
双击H2安装目录下的bin/h2.bat
启动H2客户端,输入前面配置的用户名和密码(admin/password
),可以看到成功的创建出了PERSON表。
2、Liquibase模式
此种方式下Liquibase将根据定义的changeSet生成SQL,并将其部署到目标数据库。所有改动将在changeLog文件中显式的跟踪和排序。
- 创建
ChangeLog
配置文件
同样,在Liquibase的解压目录下创建ChangeLog的配置文件:myChangeLog.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.1.xsd">
</databaseChangeLog>
- 添加changeSet
每个changeSet通过id
和author
属性来唯一标识。这两个标记以及changeLog文件的名称与包名标识唯一的更改。
每个changeSet被当作一个应用于数据库的原子操作,通常情况下,最好在changeSet中只包含一个更改操作;也允许包含多个,例如插入多行的场景,此种情况下也应该作为单个事务。Liquibase将尝试将每个changeSet作为单个事务运行,但很多数据库默认对某些命令(例如:create table
、drop table
等)提交并重新开始事务。
<?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.1.xsd">
<changeSet id="1" author="bob">
<createTable tableName="department">
<column name="id" type="int">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(50)">
<constraints nullable="false"/>
</column>
<column name="active" type="boolean" defaultValueBoolean="true"/>
</createTable>
</changeSet>
</databaseChangeLog>
- 部署
在命令行中切换到当前目录下执行liquibase.bat update
:
- 检查结果
同样,在H2客户端中可以看到DEPARTMENT表创建成功: