2019年09月28日   Spring, 码农之路   2,859 次浏览
Java(SpringBoot)数据库版本管理工具目前主流的就是flyway和liquibase,在确认选型之前看了很多对比的文章,大多观点是支持flyway的,主要因为其配置灵活。因此我也准备在我们组内使用flyway,结果在配置弄到一半的时候发现最新版本的flyway不支持我们当前的Oracle版本(支持需要付费),也不知道以后会不会往收费方向发展,于是无奈只能尝试liquibase了。
使用之后发现其实liquibase也没有网上说的那么不好用,最新版本的liquibase已经能够满足我们的要求了,非常好用,可能是网上的文章比较老旧。
在使用时我们必须要考虑到团队或项目以后的发展,如果项目越做越大成员越来越多,项目的维护成本就会越高,以后项目也有可能会拆分出N个子项目,所以我们现在就要考虑以后业务模块会怎么拆分,并建立对应的子目录。怎么分子项目这里不多说,说说我们现在的项目情况:
在没有使用数据库版本管理工具之前主要有以下几个问题:
下面开始具体的配置:
rd-common:
src/main/resources
/db/liquibase/common/master.xml
rd-pay:
src/main/resources
/db/liquibase/pay/master.xml
rd-busi:
src/main/resources
/db/liquibase/busi1/master.xml
/db/liquibase/busi2/master.xml
common目录的建立是为了保证各个子项目使用最新的jar包时能自动升级公共模块的数据库。
busi目录建立busi1和busi2是为了保证busi1和bsui2可以独立维护和拆分。
rd-common:
@Configuration
public class CommonLiquibaseConfig {
@Bean
public SpringLiquibase commonLiquibase(DataSource dataSource) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog("classpath:db/liquibase/common/master.xml");
liquibase.setShouldRun(true);
liquibase.setDatabaseChangeLogTable("RP_LIQUIBASE_COMMON");
liquibase.setDatabaseChangeLogLockTable("RP_LIQUIBASE_LOCK_COMMON");
return liquibase;
}
}
rd-pay:
@Configuration
public class PayLiquibaseConfig {
@Bean
public SpringLiquibase payLiquibase(DataSource dataSource) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
liquibase.setChangeLog("classpath:db/liquibase/pay/master.xml");
liquibase.setShouldRun(true);
liquibase.setDatabaseChangeLogTable("RP_LIQUIBASE_PAY");
liquibase.setDatabaseChangeLogLockTable("RP_LIQUIBASE_LOCK_PAY");
return liquibase;
}
}
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"
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
<include file="v20190516.sql" relativeToChangelogFile="true"/>
<include file="v20190626.sql" relativeToChangelogFile="true"/>
<include file="v20190817.sql" relativeToChangelogFile="true"/>
</databaseChangeLog>
v20190516.sql
--liquibase formatted sql
--changeset liuyang:v20190516-1
--comment 任务表添加字段:任务标题
alter table sys_job add job_title VARCHAR2(50);
comment on column sys_job.job_title is '任务标题';
--rollback alter table sys_job drop column job_title;
--changeset liuyang:v20190516-2
--comment 参数表添加字段:状态
alter table sys_config add status char(1) default '0';
comment on column sys_config.status is '状态(0启用 、1禁用)';
--rollback alter table sys_config drop column status;
>>> Hello World <<<
这篇内容是否帮助到你了呢?
如果你有任何疑问或有建议留给其他朋友,都可以给我留言。