SpringBoot整合liquibase及liquibase生成初始化脚本的方式

 更新时间:2022年02月10日 11:58:56   作者:露天窗  
这篇文章主要介绍了SpringBoot整合liquibase的相关资料,文中给大家介绍了liquibase生成初始化脚本的两种方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一. SpringBoot集成liquibase

项目集成liquibase作用

  1. 对数据库表字段进行版本控制
  2. 项目初始化部署时初始化数据库表和数据

①.导入pom依赖

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

②.配置application.yml文件,指定master.xml

spring:
  liquibase:
    change-log: classpath:liquibase/master.xml #指定master.xml文件的位置

不同spring版本配置方式不一样
具体看源码LiquibaseProperties中配置

在这里插入图片描述

③.新建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"
        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>

④.将数据库表初始脚本init_table.xml和数据初始脚本init_data.xml放到项目目录下

在这里插入图片描述

脚本可以通过手写的方式或者通过liquibase自动生成;

启动项目如果第一次运行则会在数据库中创建表和数据
后面如果脚本中有新增表或者字段启动项目的时候也会自动创建生成

二. liquibase生成数据库表和数据的初始化脚本

liquibase有两种方式生成初始化脚本

方法一:在官网下载liquibase压缩包,使用原生的命令行指令来生成

下载liquibase压缩包,解压,将mysql连接jar包复制一份到此目录下

在这里插入图片描述

进入解压目录执行如下执行

根据数据库生成表结构文件

./liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.17.jar --changeLogFile=./init-data.xml --url="jdbc:mysql://192.168.0.162:3306/hello_world" --username=root --password=123456 --diffTypes=data generateChangeLog

根据数据库生成初始数据文件

./liquibase --driver=com.mysql.cj.jdbc.Driver --classpath=mysql-connector-java-8.0.17.jar --changeLogFile=./init-table.xml --url="jdbc:mysql://192.168.0.162:3306/hello_world" --username=root --password=123456 generateChangeLog
  • 数据库驱动取决于数据库

–driver=com.mysql.cj.jdbc.Driver

  • mysql连接

–classpath=mysql-connector-java-8.0.17.jar

  • 自定义生成的初始化脚本文件名

–changeLogFile=./init-data.xml

  • 数据库连接地址

–url=“jdbc:mysql://192.168.0.162:3306/hello_world”

  • 数据库用户名密码

-username=root
–password=123456

  • 生成初始化表数据需要加上这个配置,生成表结构则不加

-diffTypes=data

方法二:使用Maven插件

<plugin>
	<groupId>org.liquibase</groupId>
	<artifactId>liquibase-maven-plugin</artifactId>
	<version>3.4.2</version>
	<configuration>
		<changeLogFile>${basedir}/src/main/resources/liquibase/change_log/changelog.xml</changeLogFile>
		<!--changelog文件生成位置-->
		<outputChangeLogFile>${basedir}/src/main/resources/liquibase/change_log/changelog.xml</outputChangeLogFile>
		<!--数据库连接-->
		<driver>com.mysql.jdbc.Driver</driver>
		<url>jdbc:mysql://192.168.0.30:3306/school</url>
		<username>qj</username>
		<password>123456</password>
		<!--输出文件编码-->
		<outputFileEncoding>UTF-8</outputFileEncoding>
		<!--执行的时候是否显示详细的参数信息-->
		<verbose>true</verbose>
		<!--连接非本地数据库是否弹出提示框-->
		<promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
		<!--生成changelog文件内容-->
		<diffTypes>tables, views, columns, indexs,foreignkeys, primarykeys, uniqueconstraints, data</diffTypes>
	</configuration>
</plugin>

如果只是生成数据库表脚本,则将上面的diffTypes注释起来或者去掉里面的data
如果只是生成数据脚本,则只留下data
如果要把数据表脚本和数据脚本生成到一个文件则保留上面的difftypes所有内容

安装好maven插件后maven插件中可以看如下图的指令,点击即可生成脚本文件

在这里插入图片描述

生成脚本如下

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.4.xsd">
          
    <changeSet author="404997819 (generated)" id="1590732067909-4">
        <createTable tableName="t_student">
            <column autoIncrement="true" name="studentId" remarks="学生自增ID" type="INT">
                <constraints primaryKey="true"/>
            </column>
            <column name="classId" remarks="班级ID" type="INT"/>
            <column name="userCode" remarks="用户唯一码" type="VARCHAR(20)"/>
            <column name="studentName" remarks="学生姓名" type="VARCHAR(20)"/>
            <column name="studentImageUrl" remarks="学生头像地址" type="VARCHAR(200)"/>
            <column name="studentCode" remarks="学生学号" type="VARCHAR(50)"/>
            <column name="IDCard" remarks="身份证号" type="VARCHAR(50)"/>
            <column name="status" remarks="学生状态 1:在读 0:毕业 -1:转校" type="VARCHAR(5)"/>
            <column name="flag" remarks="是否删除 1:正常显示,-1:表示删除" type="VARCHAR(10)"/>
            <column name="createDate" remarks="创建时间" type="datetime"/>
        </createTable>
    </changeSet>
    
    <changeSet author="404997819 (generated)" id="1590732067909-6">
        <createTable tableName="t_teacherRelation">
            <column autoIncrement="true" name="teacherRelationId" remarks="主键自增ID" type="INT">
                <constraints primaryKey="true"/>
            </column>
            <column name="classId" remarks="班级ID" type="INT"/>
            <column name="teacherId" remarks="教师ID" type="INT"/>
            <column name="teacherType" remarks="教师类型 1:班主任" type="VARCHAR(10)"/>
            <column name="flag" remarks="是否删除 1:正常显示,-1:表示删除" type="VARCHAR(10)"/>
            <column name="createDate" remarks="创建时间" type="datetime"/>
        </createTable>
    </changeSet>
   
    <changeSet author="404997819 (generated)" id="1590732067909-10">
        <createIndex indexName="Reft_userinfo88" tableName="t_api_logs">
            <column name="apiToken"/>
        </createIndex>
    </changeSet>
</databaseChangeLog>

参考文章如下
http://blog.jiunile.com/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%89%88%E6%9C%AC%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7liquibase.html
https://blog.csdn.net/cover1231988/article/details/78124673?utm_source=blogxgwz5
https://www.cnblogs.com/tonyq/p/8039770.html
https://www.jianshu.com/p/07a45b6722fd

到此这篇关于SpringBoot整合liquibase的文章就介绍到这了,更多相关SpringBoot整合liquibase内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 选择、冒泡排序、折半查找(实例讲解)

    Java 选择、冒泡排序、折半查找(实例讲解)

    下面小编就为大家带来一篇Java 选择、冒泡排序、折半查找(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Tomcat Cannot assign requested address: JVM_Bind 非端口占用冲突

    Tomcat Cannot assign requested address: JVM_Bind 非端口占用冲突

    这篇文章主要介绍了 Tomcat Cannot assign requested address: JVM_Bind 非端口占用冲突的相关资料,需要的朋友可以参考下
    2017-01-01
  • Spring常用注解 使用注解来构造IoC容器的方法

    Spring常用注解 使用注解来构造IoC容器的方法

    下面小编就为大家分享一篇Spring常用注解 使用注解来构造IoC容器的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • spring中的BeanFactory与FactoryBean的讲解

    spring中的BeanFactory与FactoryBean的讲解

    今天小编就为大家分享一篇关于spring中的BeanFactory与FactoryBean的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • SpringBoot整合Swagger2的完整过程记录

    SpringBoot整合Swagger2的完整过程记录

    Swagger是一款RESTful接口的文档在线自动生成、功能测试功能框架,这篇文章主要给大家介绍了关于SpringBoot整合Swagger2的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • 详解netty中常用的xml编码解码器

    详解netty中常用的xml编码解码器

    这篇文章主要介绍了netty中常用的xml编码解码器,进行frame拆分可以使用XmlFrameDecoder,进行xml文件内容的解析则可以使用XmlDecoder,接下来我们会详细讲解两个decoder实现和使用,感兴趣的朋友一起看看吧
    2022-05-05
  • Java设计模式之代理模式详解

    Java设计模式之代理模式详解

    这篇文章主要介绍了Java设计模式之代理模式详解,文中有非常详细的代码示例,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java多线程之条件对象Condition

    Java多线程之条件对象Condition

    这篇文章主要介绍了Java多线程之条件对象Condition,Condition中的await()方法相当于Object的wait()方法,Condition中的signal()方法相当于Object的notify()方法,Condition中的signalAll()相当于Object的notifyAll()方法,接下来和小编一起进入文章了解更具体的内容
    2021-10-10
  • Java多线程编程实现socket通信示例代码

    Java多线程编程实现socket通信示例代码

    这篇文章主要介绍了Java多线程编程实现socket通信示例代码,详细介绍了tcp、udp协议,以及基于socket的Java网络编程的相关内容及代码示例,代码测试可用,供大家参考。
    2017-10-10
  • Spring注解驱动之BeanPostProcessor后置处理器讲解

    Spring注解驱动之BeanPostProcessor后置处理器讲解

    这篇文章主要介绍了Spring注解驱动之BeanPostProcessor后置处理器讲解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09

最新评论