Liquibase的简易利用,plugin完毕持续数据库集成

作者: 数据库信息  发布:2019-07-27

此地作者未曾利用暗中认可的配备,钦赐了一个协和的路子,只要求在application.properties中增添如下配置:

  • 支撑大概全部主流的数据库,如MySQL, PostgreSQL, Oracle, Sql Server, DB2等;
  • 援助多开荒者的通力同盟维护;
  • 日记文件支持各个格式,如XML, YAML, JSON, SQL等;
  • 支撑各种运营形式,如命令行、Spring集成、Maven插件、Gradle插件等。

LiquiBase是三个用来数据库重交涉迁移的开源工具,通过日记文件的格局记录数据库的更改,然后实行日志文件中的修改,将数据库更新或回滚到平等的景况。它的靶子是提供一种数据库类型无关的消除方案,通过举行schema类型的文书来完成迁移。其有个别首要有以下:

越来越多实际情况介绍,能够浏览官网doc。

 三、依照数据库生成数据库改造日志文件

因而选择使用liquibase,原因其实挺狼狈的,由于自家不会接纳容器化技能,不会写dockfile来运作项目起头化sql脚本,就想有未有啥样简单方便的款型,最后看中了liquibase,配置起来实在轻易方便。
本人是用命令行的款式调换changeLog,然后再并入到springboot中。官方网站络提供的还应该有基于ant、maven和服务端的运用的秘籍,以往再研究。

    <configuration>
      <changeLogFile>src/main/resources/liquiabse/business_table.xml</changeLogFile>
      <driver>${jdbc.driverClassName}</driver>
      <url>${jdbc.url}</url>
      <username>${jdbc.username}</username>
      <password>${jdbc.password}</password>
    </configuration>
  • tables [DEFAULT]表
  • columns [DEFAULT] 列
  • views [DEFAULT] 视图
  • primaryKeys [DEFAULT] 主键
  • indexes [DEFAULT] 索引
  • foreignKeys [DEFAULT]
  • sequences [DEFAULT]
  • data
    诸如生成数据:

      liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root --diffTypes=data generateChangeLog
    

    自己分别生成了几个changeLog文件,贰个是inti-table.xml; 一个是init-data.xml。
    3.项目中配置liquibase
    先是在档期的顺序中增添补助:

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

    透过翻看源码,大家能见到私下认可的安顿文件存放的任务:
    图片 1

    <changeSet id="4" author="joe">
        <addColumn tableName="distributor">
          <column name="phonenumber" type="varchar(255)"/>
        </addColumn>
    </changeSet>

到此已经地点好了,运转一下种类,调节台打字与印刷出liquibase发轫化消息,那时候查看数据库,会显现数据库已经早先完结,前边数据库假如有退换,能够再生成新的changelog文件,再一次增加到花色中,达到持续集成的效果与利益。整个项目标源代码已经托管到github上了,能够点击查阅。

也能够内定回滚的步数(changeset个数):

类型中的目录结构如下图所示:
图片 2

修改已存在的列为自增列

#liquibase
liquibase.change-log=classpath:/liquibase/master.xml

--master.xml文件内容,通过inclue标签引入了两个changelog,就是之前的表结构和表数据。

<?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"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
        http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">

    <include file="classpath:liquibase/change_log/init-table.xml" relativeToChangelogFile="false"/>
    <include file="classpath:liquibase/change_log/init-data.xml" relativeToChangelogFile="false"/>
 </databaseChangeLog>

2、能够应用如下命令回滚到有些版本:

  1. 下载liquibase的安装包,解压到钦点目录下;
    图片 3

  2. 通过generateChangeLog扭转现成数据库的changeLog文件;

     liquibase --driver=com.mysql.jdbc.Driver --classpath=mysql-connector-java-5.1.27.jar --changeLogFile=./dbchangelog.xml --url="jdbc:mysql://localhost:3306/blog" --username=root --password=root generateChangeLog
    

a、使用命令行:

generateChangeLog命令默许只会成立数据库结构的改造日志文件,如若指望成立插入数据的转移日志文件,能够动用参数diffTypes,该参数包罗如下可挑选:

    <column name="Join_date" defaultValueFunction="${now}"/>

安排示范如下:

  • indexes [DEFAULT]  索引
    <changeSet id="3" author="betsey">
        <code type="section" width="100%">
        <insert tableName="distributor">
          <column name="id" valueNumeric="3"/>
          <column name="name" value="Manassas Beer Company"/>
        </insert>
        <insert tableName="distributor">
          <column name="id" valueNumeric="4"/>
          <column name="name" value="Harrisonburg Beer Distributors"/>
        </insert>
    </changeSet>

应该编写用于操作数据的 SQL 脚本,因为运用 LiquiBase XML 更动集限制相当多。偶尔候使用 SQL 脚本向数据库应用大批量的改变会轻松一些。LiquiBase 也足以支撑那几个现象。

    <dropColumn tableName="distributor" columnName="phonenumber"/>

rollback操作可选参数包括:

    <sql>
        ALTER SEQUENCE t_role_role_id_seq RESTART WITH 3;
    </sql>

3、能够依靠差异的版本分别创立连锁changelog文件,使用include标签分别引进,如主干changelog文件为master-changelog.xml,定义如下:

    <changeSet id="6" author="joe"> 
        <sqlFile path="insert-distributor-data.sql"/>
    </changeSet>

全体示举个例子下:

四、对现存数据库举行重构

    <changeSet id="1" author="X">
        <table name="t">
            <column name="c" type="varchar(3)"/>
        </table>
        <sql>ALTER TABLE t ADD CONSTRAINT check_yes_no CHECK (c = 'yes' OR c = 'no')</sql>
    </changeSet>
    <changeSet id="1" author="Arthur">
        <sql>CREATE TYPE my_state AS ENUM ('yes','no')</sql>
        <table name="foo">
            <column name="state" type="my_state"/>
        </table>
    </changeSet>

八、帮衬大多据库

1、增添版本标签:

九、参谋网址

成立系列

如下例为从 LiquiBase 改换集运营五个定制 SQL 文件

  • sequences [DEFAULT]

二、配置liquibase-maven-plugin

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>properties-maven-plugin</artifactId>
        <version>1.0-alpha-2</version>
        <executions>
          <execution>
            <phase>initialize</phase>
            <goals>
              <goal>read-project-properties</goal>
            </goals>
            <configuration>
              <files>
                <file>${basedir}/src/main/resources/conf/geoq.properties</file>
              </files>
            </configuration>
          </execution>
        </executions>
    </plugin>

在changelog文件中,如梦想创造postgresql支持的enum,能够应用的法子如下:

mvn liquibase:tag -Dliquibase.tag=checkpoint

 五、liquibase-maven-plugin基本命令

sequenceName

序列名称 [required]

schemaName

表schema名称

incrementBy

自增间隔值

minValue

序列的最小值

maxValue

序列的最大值

ordered

'true' 或者 'false'

startValue

序列的起始值

  • views [DEFAULT]  视图
    jdbc.driverClassName=org.postgresql.Driver
    jdbc.url=jdbc:postgresql://localhost:5432/geoq_dev
    jdbc.username=postgres
    jdbc.password=4652

添加列

    <changeSet id="3" author="betsey">
        <createTable tableName="distributor">
          <column name="id" type="int">
            <constraints primaryKey="true" nullable="false"/>
          </column>
          <column name="name" type="varchar(255)">
            <constraints nullable="false"/>
          </column>
          <column name="address" type="varchar(255)">
            <constraints nullable="true"/>
          </column>
          <column name="active" type="boolean" defaultValue="1"/>
        </createTable>
    </changeSet>

七、创造特殊的类型的字段

geoq.properties配置示范如下:

修改种类

    mvn liquibase:rollback -Dliquibase.rollbackTag=checkpoint

3、获取系统当下岁月

generateChangeLog暗中同意只会创设数据库结构的改换日志文件,假诺指望创设插入数据的退换日志文件,能够使用参数diffTypes,该参数饱含如下可选择:

要么转移回滚的sql脚本:

2、使用约束

sequenceName

序列的名称 [required]

incrementBy

新的自增间隔值 [required]

    <executions>
        <execution>
            <phase>process-resources</phase>
            <configuration>
                <changeLogFile>src/main/resources/liquiabse/master-changelog.xml</changeLogFile>
                <driver>${jdbc.driverClassName}</driver>
                <url>${jdbc.url}</url>
                <username>${jdbc.username}</username>
                <password>${jdbc.password}</password>
                <rollbackTag>1.1</rollbackTag>
            </configuration>
            <goals>
                <goal>update</goal>
                <goal>rollback</goal>
            </goals>
        </execution>
    </executions>

本文由金沙澳门官网发布于数据库信息,转载请注明出处:Liquibase的简易利用,plugin完毕持续数据库集成

关键词: 金沙澳门官网

上一篇:搭建MySQL高可用负载均衡集群
下一篇:没有了