springboot
整合liqiubase
liqiubase
是一个用于数据库重构和迁移的开源工具,经过日志文件的形式记录数据库的变动,而后执行日志文件中的修改,将数据库更新或者回滚到一致的状态.它的目标是提供一种数据库类型无关的解决方案,而后经过执行schema类型的文件来达到迁移.其主要的特色以下:html
liquibase 官方文档地址:http://www.liquibase.org/documentation/index.htmljava
liquibase
核心依赖<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
复制代码
application.yml
中配置)LiquibaseConfig
类,用于liquibase
的基本配置import javax.sql.DataSource;
import liquibase.integration.spring.SpringLiquibase;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class LiquibaseConfig {
@Bean
public SpringLiquibase liquibase(DataSource dataSource) {
SpringLiquibase liquibase = new SpringLiquibase();
liquibase.setDataSource(dataSource);
//指定changelog的位置,这里使用的一个master文件引用其余文件的方式
liquibase.setChangeLog("classpath:liquibase/master.xml");
liquibase.setContexts("development,test,production");
liquibase.setShouldRun(true);
return liquibase;
}
}
复制代码
application.yml
中进行基本配置# liquibase配置
liquibase:
enabled: true # 开启liquibase 对数据库的管理功能
change-log: "classpath:/db/changelog/db.changelog-master.yaml" #主配置文件的路径
contexts: dev # 引用立秋脚本的上下文,若是存在多个开发环境的话[生产\开发\测试\]
check-change-log-location: true # 检查changlog的文件夹是否存在
rollback-file: classPath:/data/backup.sql # 执行更新的时候写入回滚的SQL文件
复制代码
liquibase
核心文件文件结构以下 mysql
master.xml
是主配置文件,用于加载日志文件或者是原有的系统数据库文件spring
<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.1.xsd">
<!--includeAll 标签能够把一个文件夹下的全部 changelog 都加载进来。若是单个加载能够用 include。 includeAll 标签里有两个属性:path 和 relativeToChangelogFile。 <includeAll path="liquibase/changelogs/" relativeToChangelogFile="false"/> -->
<include file="liquibase/changelogs/jdbc.sql" relativeToChangelogFile="false"/>
<include file="liquibase/changelogs/changelog-1.0.xml" relativeToChangelogFile="false"/>
</databaseChangeLog>
复制代码
changelog
文件sql
<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.1.xsd">
<!-- 建立表 -->
<changeSet id="20200508001" author="xc">
<createTable tableName="project_info">
<column name="project_id" type="varchar(64)" encoding="utf8" remarks="项目id">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="project_name" type="varchar(255)" encoding="utf8" remarks="项目名字">
<!-- 是否能够为空 -->
<constraints nullable="false"/>
</column>
<column name="project_difficulty" type="float" encoding="utf8" remarks="项目难度"/>
<column name="category_id" type="varchar(64)" encoding="utf8" remarks="项目类型类目编号"/>
<column name="project_status" type="int(11)" encoding="utf8" remarks="项目状态, 0招募中,1 进行中,2已完成,3失败,4延期,5删除"/>
<column name="project_desc" type="varchar(512)" encoding="utf8" remarks="项目简介"/>
<column name="project_creater_id" type="varchar(64)" encoding="utf8" remarks="项目建立者id"/>
<column name="team_id" type="varchar(64)" encoding="utf8" remarks="项目所属团队id"/>
<column name="create_time" type="bigint(64)" encoding="utf8" remarks="建立时间"/>
<column name="update_time" type="bigint(64)" encoding="utf8" remarks="更新时间"/>
</createTable>
</changeSet>
<!-- 添加字段 -->
<changeSet id="20200508002" author="xc">
<addColumn tableName="project_info">
<column name="phonenumber" type="varchar(255)" encoding="utf-8" remarks="项目负责人联系电话"/>
</addColumn>
</changeSet>
<!-- 删除字段 -->
<changeSet id="20200508003" anthor="xc">
<dropColumn tableName="project_info" columnName="phonenumber"/>
</changeSet>
<!-- 操做数据 -->
<changeSet id="3" author="xc">
<code type="section" width="100%">
<insert tableName="project_info">
<column name="id" valueNumeric="3"/>
<column name="project_name" value="Manassas Beer Company"/>
</insert>
<insert tableName="project_info">
<column name="id" valueNumeric="4"/>
<column name="project_name" value="Harrisonburg Beer Distributors"/>
</insert>
</changeSet>
<!-- 引入sql脚本文件 -->
<changeSet id="6" author="xc">
<sqlFile path="insert-distributor-data.sql"/>
</changeSet>
<changeSet id="000000000000044" author="hc">
<sqlFile dbms="mysql" endDelimiter=";;" encoding="UTF-8" path="config/liquibase/changelog/functions.sql"/>
</changeSet>
<changeSet>
<!-- 外键、索引的建立语句会影响到本语句的执行,因此将其都放到另外的changeSet中单独去执行 -->
<modifySql dbms="mysql">
<append value="ENGINE=INNODB CHARSET=UTF8 COLLATE utf8_unicode_ci"/>
</modifySql>
</changeSet>
</databaseChangeLog>
复制代码