程序员刘杨

———没有写不出的程序,只有不努力的程序员。

2019年09月28日   码农之路   736 次浏览

祝大家新年快乐,有任何问题可与我联系:点击这里给我发消息

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

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

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

  • rd-common:公共模块,对所有子项目提供jar包
  • rd-pay:支付模块,对所有子项目提供支付接口
  • rd-busi:业务模块,各种业务都在这个子项目里面,各个子业务都是分了目录的,当业务需要独立时可以快速的拆分成子项目

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

  1. rd-common变更导致各个子项目数据库更新不及时或对数据库重复更新
  2. 提交测试的版本经常遗漏了脚本导致测试不通过
  3. 各个不同地区上线的项目在升级时经常出现数据库不一致
  4. 升级脚本时的人为问题

 

下面开始具体的配置:

一、首先在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

<?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;

 

赞 赏
申明:除非注明,本站文章均为原创,转载请以链接形式标明本文地址。 如有问题,请于一周内与本站联系,本站将在第一时间对相关内容进行处理。
本文地址: http://www.yyjjssnn.cn/articles/854.html

>>> Hello World <<<

这篇内容是否帮助到你了呢?

如果你有任何疑问或有建议留给其他朋友,都可以给我留言。

:wink: :twisted: :surprised: :smile: :smile9: :smile8: :smile7: :smile6: :smile5: :smile56: :smile55: :smile54: :smile53: :smile52: :smile51: :smile50: :smile4: :smile49: :smile48: :smile47: :smile46: :smile45: :smile44: :smile43: :smile42: :smile41: :smile40: :smile3: :smile39: :smile38: :smile37: :smile36: :smile35: :smile34: :smile33: :smile32: :smile31: :smile30: :smile2: :smile29: :smile28: :smile27: :smile26: :smile25: :smile24: :smile23: :smile22: :smile21: :smile20: :smile1: :smile19: :smile18: :smile17: :smile16: :smile15: :smile14: :smile13: :smile12: :smile11: :smile10: :smile0: :sad: :rolleyes1: :redface: :razz: :question: :neutral: :mrgreen: :mad: :lol: :idea: :exclaim: :evil: :eek: :cry: :cool: :confused: :biggrin: :arrow:

友情链接: 程序员刘杨 刘杨
Copyright 2003~2018 保留所有权利 | 网站地图
备案号:湘ICP备14001005号-2

湘公网安备 43011102001322号