java版本控制工具_Java(SpringBoot)数据库版本管理工具liquibase

本文介绍了在Java SpringBoot项目中,如何使用数据库版本管理工具liquibase进行数据库迁移管理。针对项目结构,如rd-common、rd-pay和rd-busi模块,详细阐述了liquibase的目录设置、配置类编写以及变更脚本的组织方式,解决数据库更新不及时、测试遗漏和升级一致性等问题。
摘要由CSDN通过智能技术生成

祝大家新年快乐,有任何问题可与我联系:0965a7154146dd49b11cadccd18d91c7.png

Java(SpringBoot)数据库版本管理工具目前主流的就是flyway和liquibase,在确认选型之前看了很多对比的文章,大多观点是支持flyway的,主要因为其配置灵活。因此我也准备在我们组内使用flyway,结果在配置弄到一半的时候发现最新版本的flyway不支持我们当前的Oracle版本(支持需要付费),也不知道以后会不会往收费方向发展,于是无奈只能尝试liquibase了。

使用之后发现其实liquibase也没有网上说的那么不好用,最新版本的liquibase已经能够满足我们的要求了,非常好用,可能是网上的文章比较老旧。

在使用时我们必须要考虑到团队或项目以后的发展,如果项目越做越大成员越来越多,项目的维护成本就会越高,以后项目也有可能会拆分出N个子项目,所以我们现在就要考虑以后业务模块会怎么拆分,并建立对应的子目录。怎么分子项目这里不多说,说说我们现在的项目情况:

rd-common:公共模块,对所有子项目提供jar包

rd-pay:支付模块,对所有子项目提供支付接口

rd-busi:业务模块,各种业务都在这个子项目里面,各个子业务都是分了目录的,当业务需要独立时可以快速的拆分成子项目

在没有使用数据库版本管理工具之前主要有以下几个问题:

rd-common变更导致各个子项目数据库更新不及时或对数据库重复更新

提交测试的版本经常遗漏了脚本导致测试不通过

各个不同地区上线的项目在升级时经常出现数据库不一致

升级脚本时的人为问题

下面开始具体的配置:

一、首先在src/main/resources建立liquibase目录,所有的升级脚本都放这:

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可以独立维护和拆分。

二、其次就是配置类了,需要为每个master.xml写一个liquibase的配置类,否则liquibase不会生效。

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同级目录

master.xml

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">

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;

~谢谢打赏~手机请长按图片~

8ab42301bbc2800528b800f60bb82ad3.png

赞 赏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值