springboot集成Liquibase管理数据库变更【简单集成】

Liquibase是个开源框架,能有效管理每次开发数据库变更,但他并不会对你的数据库做检查,仅仅通过你配置文件中的脚本来检验是否条件成立,然后再执行相关语句,达到同步的目的。

另外,它会在初次启动时,生成两张表:DATABASECHANGELOG, DATABASECHANGELOGLOCK来保存每次更新的记录用于比对。

它支持多种数据库,不过你在配置SQL语句时要写正确,不能多种数据库混用,特定数据库字段类型用xml配置时也要符合该数据库规范。

1、加入依赖包

在父工程pom中加入依赖版本,如下:

<dependency>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-core</artifactId>
    <version>3.6.3</version>
</dependency>

2、application.yml配置

spring:
  liquibase:
    enabled: true
    change-log: "classpath:/changelog/db.changelog-master.yaml"

3、db.changelog-master.yaml内容

databaseChangeLog:
  - include:
      file: changelog/eps/mysql-ddl-init.xml
  - include:
      file: changelog/eps/mysql-dml-change.xml

其实,里面包含的文件可以任意组合,但必须统一要求,如:每个文件要放哪些内容,或者多个文件如何命名等。

4、具体SQL配置文件内容,mysql-ddl-init.xml

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<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.6.xsd">

    <!--gg_ai_status表-->
    <changeSet author="shikeying" id="20200522-demo-update-1">
        <preConditions>
            <not>
                <columnExists tableName="gg_ai_status" columnName="summary"></columnExists>
            </not>
        </preConditions>
        <addColumn tableName="gg_ai_status">
            <column name="summary" type="varchar(255)"/>
        </addColumn>
        <comment>更新原有表的字段</comment>
    </changeSet>
    <changeSet author="shikeying" id="20200522-demo-insert-1">
        <preConditions>
            <not>
                <tableExists tableName="test_liquibase"></tableExists>
            </not>
        </preConditions>
        <createTable tableName="test_liquibase" remarks="表不存在(新建)">
            <column name="id" type="bigint" remarks="主键">
                <constraints nullable="false" primaryKey="true" primaryKeyName="pk_test_li_id"/>
            </column>
            <column name="name" type="varchar(200)" remarks="名字" defaultValue="">
                <constraints nullable="false"/>
            </column>
            <column name="summary" type="text" remarks="备注">
                <constraints nullable="true"/>
            </column>
        </createTable>
        <comment>加入新表</comment>
    </changeSet>

</databaseChangeLog>

5、具体SQL配置文件内容,mysql-dml-change.xml

<?xml version="1.1" encoding="UTF-8" standalone="no"?>
<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.6.xsd">

    <changeSet author="shikeying" id="20200522-demo-insert-data-1">
        <sql>insert into test_liquibase(id,name,summary) values(1,'shikeying','');</sql>
        <sql>insert into test_liquibase(id,name,summary) values(2,'sunwukong','has_value');</sql>
    </changeSet>

</databaseChangeLog>

注意要点:

1)author为作者,通常每个人会区分开来,id为更新数据集的序号,建议不要重复,设置个规则

2)每个changeSet中最好只有一个操作,或者多个同类型操作,如:写入一个表多条数据、更新一个表多个字段等

3)author和id一旦确定并且被运行过,就千万不能再修改这俩属性,因为你修改后它认为是新的内容会再次执行而导致数据重复报错,记住changeSet就是流水账,只能追加不能修改(删除也可以)。

4)如果enables:true,则每次启动都会执行变更检查,如果不需要关闭即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值