【原文链接】
1 将Liquibase安装目录中的example文件夹拷贝至其他位置,如:
2 启动H2 database作为测试使用
在cmd窗口进入 example目录,然后执行 liquibase init start-h2 命令
D:\src\examples>liquibase init start-h2
####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ __ _ ___ ___ ##
## | | | |/ _` | | | | | '_ \ / _` / __|/ _ \ ##
## | |___| | (_| | |_| | | |_) | (_| \__ \ __/ ##
## \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___| ##
## | | ##
## |_| ##
## ##
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## Free schema change activity reports at ##
## https://hub.liquibase.com ##
## ##
####################################################
Starting Liquibase at 14:11:59 (version 4.9.1 #1978 built at 2022-03-28 19:39+0000)
Liquibase Version: 4.9.1
Liquibase Community 4.9.1 by Liquibase
Starting Example H2 Database...
NOTE: The database does not persist data, so stopping and restarting this process will reset it back to a blank database
Connection Information:
Dev database:
JDBC URL: jdbc:h2:tcp://localhost:9090/mem:dev
Username: dbuser
Password: letmein
Integration database:
JDBC URL: jdbc:h2:tcp://localhost:9090/mem:integration
Username: dbuser
Password: letmein
Opening Database Console in Browser...
Dev Web URL: http://192.168.2.69:8090/frame.jsp?jsessionid=6f0e45dd9a8f7c060f9b76e8633b183d
Integration Web URL: http://192.168.2.69:8090/frame.jsp?jsessionid=a4cb3c7057107c91a2c7318b3c4a7841
同时在浏览器打开H2 database终端的web页面
3 执行update命令
新打开一个cmd窗口,进入 example/sql目录,然后执行 liquibase update 命令
D:\src\examples\sql>liquibase update
####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ __ _ ___ ___ ##
## | | | |/ _` | | | | | '_ \ / _` / __|/ _ \ ##
## | |___| | (_| | |_| | | |_) | (_| \__ \ __/ ##
## \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___| ##
## | | ##
## |_| ##
## ##
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## Free schema change activity reports at ##
## https://hub.liquibase.com ##
## ##
####################################################
Starting Liquibase at 14:15:54 (version 4.9.1 #1978 built at 2022-03-28 19:39+0000)
Liquibase Version: 4.9.1
Liquibase Community 4.9.1 by Liquibase
Do you want to see this operation's report in Liquibase Hub, which improves team collaboration?
If so, enter your email. If not, enter [N] to no longer be prompted, or [S] to skip for now, but ask again next time [S]:
N
No operations will be reported. Simply add a liquibase.hub.apiKey setting to generate free deployment reports. Learn more at https://hub.liquibase.com
* Updated properties file liquibase.properties to set liquibase.hub.mode=off
Running Changeset: example-changelog.sql::1::your.name
Running Changeset: example-changelog.sql::2::your.name
Running Changeset: example-changelog.sql::3::other.dev
Liquibase command 'update' was executed successfully.
D:\src\examples\sql>
4 分析update命令的操作原理
执行update命令实质是参照example-changelog.sql文件执行了sql命令,打开example-changelog.sql文件,内容如下:可见,这里创建了一个person表,一个company表,此外还给person表增加了一个country的列
--liquibase formatted sql
--changeset your.name:1 labels:example-label context:example-context
--comment: example comment
create table person (
id int primary key auto_increment not null,
name varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
city varchar(30)
)
--rollback DROP TABLE person;
--changeset your.name:2 labels:example-label context:example-context
--comment: example comment
create table company (
id int primary key auto_increment not null,
name varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
city varchar(30)
)
--rollback DROP TABLE company;
--changeset other.dev:3 labels:example-label context:example-context
--comment: example comment
alter table person add column country varchar(2)
--rollback ALTER TABLE person DROP COLUMN country;
5 到H2 database查看结果
此时刷新H2 database的web页面,如下可以看到确实增加了person和company两个表,而且person表中有country列
6 执行liquibase update查找配置文件的流程
执行liquibase的命令是从配置文件liquibase.properties中读取配置的,如下,可以看出是读取example-changelog.sqlzhon中的sql配置命令,然后去链接jdbc:h2:tcp://localhost:9090/mem:devde 的数据库进行操作的
#### _ _ _ _
## | | (_) (_) |
## | | _ __ _ _ _ _| |__ __ _ ___ ___
## | | | |/ _` | | | | | '_ \ / _` / __|/ _ \
## | |___| | (_| | |_| | | |_) | (_| \__ \ __/
## \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___|
## | |
## |_|
##
## The liquibase.properties file stores properties which do not change often,
## such as database connection information. Properties stored here save time
## and reduce risk of mistyped command line arguments.
## Learn more: https://www.liquibase.org/documentation/config_properties.html
####
####
## Note about relative and absolute paths:
## The liquibase.properties file requires paths for some properties.
## The classpath is the path/to/resources (ex. src/main/resources).
## The changeLogFile path is relative to the classpath.
## The url H2 example below is relative to 'pwd' resource.
####
# Enter the path for your changelog file.
changeLogFile=example-changelog.sql
#### Enter the Target database 'url' information ####
liquibase.command.url=jdbc:h2:tcp://localhost:9090/mem:dev
# Enter the username for your Target database.
liquibase.command.username: dbuser
# Enter the password for your Target database.
liquibase.command.password: letmein
#### Enter the Source Database 'referenceUrl' information ####
## The source database is the baseline or reference against which your target database is compared for diff/diffchangelog commands.
# Enter URL for the source database
liquibase.command.referenceUrl: jdbc:h2:tcp://localhost:9090/mem:integration
# Enter the username for your source database
liquibase.command.referenceUsername: dbuser
# Enter the password for your source database
liquibase.command.referencePassword: letmein
# Logging Configuration
# logLevel controls the amount of logging information generated. If not set, the default logLevel is INFO.
# Valid values, from least amount of logging to most, are:
# OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL
# If you are having problems, setting the logLevel to DEBUG and re-running the command can be helpful.
# logLevel: DEBUG
# The logFile property controls where logging messages are sent. If this is not set, then logging messages are
# displayed on the console. If this is set, then messages will be sent to a file with the given name.
# logFile: liquibase.log
#### Liquibase Pro Key Information ####
# Learn more, contact support, or get or renew a Pro Key at https://www.liquibase.com/protrial
# liquibase.pro.licensekey:
#### Liquibase Hub Information ####
# Liquibase Hub is a free secure SaaS portal providing status reporting, monitoring & insights
# into your Liquibase database release automation.
# https://hub.liquibase.com
## Add your free Hub API key here
# liquibase.hub.apikey:
# liquibase.hub.mode:all
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## Get support at liquibase.com/support ##
liquibase.hub.mode=off
7 对example-changelog.sql修改,再次执行
比如在末尾增加如下两行
--changeset redrose2100:1
ALTER TABLE company ADD country INT;
完成内容如下:
--liquibase formatted sql
--changeset your.name:1 labels:example-label context:example-context
--comment: example comment
create table person (
id int primary key auto_increment not null,
name varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
city varchar(30)
)
--rollback DROP TABLE person;
--changeset your.name:2 labels:example-label context:example-context
--comment: example comment
create table company (
id int primary key auto_increment not null,
name varchar(50) not null,
address1 varchar(50),
address2 varchar(50),
city varchar(30)
)
--rollback DROP TABLE company;
--changeset other.dev:3 labels:example-label context:example-context
--comment: example comment
alter table person add column country varchar(2)
--rollback ALTER TABLE person DROP COLUMN country;
--changeset redrose2100:1
ALTER TABLE company ADD country INT;
8 再次执行update命令
执行回显如下所示,提示执行成功
D:\src\examples\sql>liquibase update
####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ __ _ ___ ___ ##
## | | | |/ _` | | | | | '_ \ / _` / __|/ _ \ ##
## | |___| | (_| | |_| | | |_) | (_| \__ \ __/ ##
## \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___| ##
## | | ##
## |_| ##
## ##
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## Free schema change activity reports at ##
## https://hub.liquibase.com ##
## ##
####################################################
Starting Liquibase at 14:38:37 (version 4.9.1 #1978 built at 2022-03-28 19:39+0000)
Liquibase Version: 4.9.1
Liquibase Community 4.9.1 by Liquibase
Running Changeset: example-changelog.sql::1::redrose2100
Liquibase command 'update' was executed successfully.
D:\src\examples\sql>
9 刷新H2 database的WEB页面
如下,可以看到已经增加,字段类型也符合
10 此时不做任何修改再次执行一次update命令
如下,可以看出,此时并为做什么操作
D:\src\examples\sql>liquibase update
####################################################
## _ _ _ _ ##
## | | (_) (_) | ##
## | | _ __ _ _ _ _| |__ __ _ ___ ___ ##
## | | | |/ _` | | | | | '_ \ / _` / __|/ _ \ ##
## | |___| | (_| | |_| | | |_) | (_| \__ \ __/ ##
## \_____/_|\__, |\__,_|_|_.__/ \__,_|___/\___| ##
## | | ##
## |_| ##
## ##
## Get documentation at docs.liquibase.com ##
## Get certified courses at learn.liquibase.com ##
## Free schema change activity reports at ##
## https://hub.liquibase.com ##
## ##
####################################################
Starting Liquibase at 14:41:45 (version 4.9.1 #1978 built at 2022-03-28 19:39+0000)
Liquibase Version: 4.9.1
Liquibase Community 4.9.1 by Liquibase
Liquibase command 'update' was executed successfully.
D:\src\examples\sql>