0
点赞
收藏
分享

微信扫一扫

SpringBoot_liquibase使用

千妈小语 2022-01-27 阅读 20
spring boot

文章目录


前言

介绍springboot快速集成liquibase使用

简介:liquibase

liquibase是一个数据库变更的版本控制工具。项目中通过liquibase解析用户编写的liquibase的配置文件,生成sql语句,并执行和记录。执行是根据记录确定sql语句是否曾经执行过,和配置文件里的预判断语句确定sql是否执行。

一句话: Track, version, and deploy database changes

  • 官网: https://liquibase.org/

实践1.最小化启用liquibase

1. maven依赖添加

		<parent>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-parent</artifactId>
			<version>2.1.7.RELEASE</version>
		</parent>
		
		<!-- 项目引用第三方jar包 全局版本信息 -->
		<properties>
			<!-- mysql-->
			<mysql-connector-java.version>8.0.27</mysql-connector-java.version>
		</properties>
		
		<!-- liquibase管理升级脚本(org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration 自动装配)-->
		<dependency>
			<groupId>org.liquibase</groupId>
			<artifactId>liquibase-core</artifactId>
		</dependency>
		
		<!--mysql jdbc驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql-connector-java.version}</version>
		</dependency>

2. application.yaml配置changelog-master.xml

引入liquibase的包后,springboot通过spring-boot-autoconfigure包中org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration 默认自动启用配置,只要配置数据库表配置描述文件即可

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.100.50:3306/test?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true
    username: root
    password: 123456
  liquibase:
    change-log: classpath:db/liquibase/changelog-master.xml

3. changelog-master.xml管理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.8.xsd">
    <include file="./changelog/*.xml" relativeToChangelogFile="true" />
</databaseChangeLog>

这里扫描文件src/main/resources/db/liquibase/changelog目录,为不同版本建立不同的changelog文件
在这里插入图片描述

  • changelog_init.xml 项目初始搭建脚步
  • changelog_v1.0 当前版本新增的数据库结构变动
  • changelog_v1.1 …

4. 项目表初始化changelog_init.xml示例

<?xml version="1.1" 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.5.xsd">
    <changeSet author="Administrator (generated)" id="1643274861695-1" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <createTable tableName="sys_log">
            <column name="log_id" remarks="日志主键" type="VARCHAR(32)">
                <constraints nullable="false"/>
            </column>
            <column name="type" remarks="日志类型" type="VARCHAR(20)"/>
            <column name="title" remarks="日志标题" type="VARCHAR(100)"/>
            <column name="description" remarks="日志描述" type="VARCHAR(500)"/>
            <column name="ip" remarks="请求IP" type="VARCHAR(20)"/>
            <column name="request_uri" remarks="URI" type="VARCHAR(300)"/>
            <column name="method" remarks="请求方式" type="VARCHAR(300)"/>
            <column name="params" remarks="提交参数" type="TEXT"/>
            <column name="exception" remarks="异常" type="TEXT"/>
            <column name="operate_date" remarks="操作时间" type="datetime(6)"/>
            <column name="timeout" remarks="请求时长" type="VARCHAR(10)"/>
            <column name="login_name" remarks="用户登入名" type="VARCHAR(32)"/>
            <column name="request_id" remarks="requestID" type="VARCHAR(36)"/>
            <column name="data_snapshot" remarks="历史数据" type="TEXT"/>
            <column name="request_timestamp" remarks="请求时间戳" type="BIGINT"/>
            <column name="status" remarks="日志状态" type="INT"/>
        </createTable>
    </changeSet>
    <changeSet author="Administrator (generated)" id="1643274861695-2" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <createTable tableName="sys_user">
            <column name="user_id" remarks="用户ID" type="VARCHAR(32)">
                <constraints nullable="false"/>
            </column>
            <column name="organization_id" remarks="机构ID" type="VARCHAR(32)"/>
            <column name="username" remarks="用户名" type="VARCHAR(32)"/>
            <column name="name" remarks="姓名" type="VARCHAR(20)"/>
            <column name="password" remarks="密码" type="VARCHAR(32)"/>
            <column name="sex" remarks="性别" type="CHAR(1)"/>
            <column name="phone" remarks="手机" type="VARCHAR(100)"/>
            <column name="email" remarks="邮件" type="VARCHAR(100)"/>
            <column name="create_date" remarks="创建日期" type="datetime(6)"/>
            <column name="create_by" remarks="创建人ID" type="VARCHAR(32)"/>
            <column name="locked" remarks="是否被锁定" type="INT"/>
            <column name="login_ip" remarks="最后登入IP" type="VARCHAR(20)"/>
            <column name="login_date" remarks="最后登入日期" type="datetime(6)"/>
        </createTable>
    </changeSet>
    <changeSet author="Administrator (generated)" id="1643274861695-3" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <addPrimaryKey columnNames="log_id" constraintName="PRIMARY" tableName="sys_log"/>
    </changeSet>
    <changeSet author="Administrator (generated)" id="1643274861695-4" objectQuotingStrategy="QUOTE_ALL_OBJECTS">
        <addPrimaryKey columnNames="user_id" constraintName="PRIMARY" tableName="sys_user"/>
    </changeSet>
</databaseChangeLog>

4. 启动运行

项目启动后会自动生成 liquibase用于记录版本信息的配置表, 同时根据changelog生成业务数据表
在这里插入图片描述

实践2.逆向生成changelog.xml文件

场景一:在一些情况下,要把项目从一种关系型数据库切替换成另一种,但是不同的数据库的表建表语句是有差异的这时候可以巧妙利用liquibase的逆向工程来实现.
如: postgressql > changlog.xml -> mysql

场景二:备份当前项目库的建表信息

1. maven插件配置:liquibase-maven-plugin

从已有项目数据库表生成,通过liquibase的maven插件

			<!--mvn liquibase:generateChangeLog (mysql表反向生成liquibase的xml配置)-->
			<plugin>
				<groupId>org.liquibase</groupId>
				<artifactId>liquibase-maven-plugin</artifactId>
				<version>3.5.1</version>
				<configuration>
					<!--properties文件路径,该文件记录了数据库连接信息等
					<propertyFile>src/main/resources/liquibase.properties</propertyFile>
					-->
					<propertyFileWillOverride>true</propertyFileWillOverride>
					<!--生成文件的路径-->
					<outputChangeLogFile>src/main/resources/db/liquibase/changelog/changelog_init.xml</outputChangeLogFile>
					<!--要连接库配置信息 -->
					<driver>com.mysql.jdbc.Driver</driver>
                    <url>jdbc:mysql://192.168.100.50:3306/demo_aop_log?useUnicode=true&amp;characterEncoding=utf-8</url>
                    <username>root</username>
                    <password>123456</password>

				</configuration>
			</plugin>

2. maven命令执行:反向生成changelog

mvn liquibase:generateChangeLog

前文中changelog_init.xml既是通过方向生成的changelog示例

附录

  1. 官网
  2. liquibase介绍
举报

相关推荐

0 条评论