LiquiBaseЭто инструмент с открытым исходным кодом для реконструкции и миграции базы данных.Он записывает изменения базы данных в виде файлов журнала, а затем выполняет изменения в файлах журнала для обновления или отката базы данных до согласованного состояния. Его цель — предоставить решение, не зависящее от типа базы данных, которое мигрирует, выполняя файлы типа схемы. Его основные моменты заключаются в следующем:
- Поддержка практически всех основных баз данных, таких как MySQL, PostgreSQL, Oracle, Sql Server, DB2 и т. д.;
- Поддержка совместного обслуживания нескольких разработчиков;
- Файл журнала поддерживает несколько форматов, таких как XML, YAML, JSON, SQL и т. д.;
- Поддерживает несколько методов запуска, таких как командная строка, интеграция Spring, плагин Maven, плагин Gradle и т. д.
Адрес официального документа Liquibase:Woohoo. Перейдите на страницу base.org/document ATI…
1. Введите зависимости
Сначала введите зависимости в файл pom
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
2. Укажите расположение файла конфигурации
Создайте новый в коде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;
}
}
3. Напишите файл конфигурации
Структура каталога:
src/main/resourcesСоздайте новую папку в:liquibase, используется для храненияliquibaseсвязанные документы.
master.xml
затем вliquibaseновая папкаmaster.xmlкак основной файл.
<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 path="liquibase/changelogs/" relativeToChangelogFile="false"/>
</databaseChangeLog>
includeAllЯрлыки могут загружать все журналы изменений в папку. Если можно использовать одну нагрузкуinclude.
includeAllВ теге есть два атрибута:pathа такжеrelativeToChangelogFile.
| Attribute | Description |
|---|---|
| file | Name of the file to import required |
| relativeToChangelogFile | Is the file path relative to the root changelog file rather than to the classpath. Defaults to "false" since 1.9 |
path(файл в теге include): указывает местоположение файла или папки для загрузки
relativeToChangelogFile: Относится ли путь расположения файла к корневому журналу изменений, значение по умолчанию — false, то есть относительно пути к классам.
changelog
еще одинliquibaseновая папкаchangelogsПапка используется для хранения журнала изменений.
Создайте новый здесьchangelog-1.0.xml
<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="20190713-01" author="solo">
<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="项目名字"/>
<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="20190713-02" author="solo">
<createTable tableName="project_category" remarks="项目类型表">
<column name="id" type="varchar(64)" remarks="项目类型id">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="name" type="varchar(255)" remarks="类目类型名称"/>
<column name="status" type="int(11)" remarks="状态。1正常,2删除"/>
<column name="remark" type="varchar(255)" remarks="备注"/>
</createTable>
</changeSet>
<changeSet id="20190713-03" author="solo">
<createTable tableName="project_like_user" remarks="项目点赞表">
<column name="id" type="varchar(64)" remarks="主键id">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="project_id" type="varchar(64)" remarks="项目id"/>
<column name="user_id" type="varchar(64)" remarks="点赞的用户id"/>
<column name="status" type="int(11)" remarks="点赞状态,0 取消点赞,1点赞"/>
<column name="type" type="int(11)" remarks="类型 1点赞"/>
<column name="create_time" type="bigint(64)" remarks="创建时间"/>
<column name="update_time" type="bigint(64)" remarks="更新时间"/>
</createTable>
</changeSet>
<changeSet id="20190713-04" author="solo">
<createTable tableName="project_picture" remarks="项目图片表">
<column name="id" type="varchar(64)" remarks="图片id">
<constraints primaryKey="true" nullable="false"/>
</column>
<column name="project_id" type="varchar(64)" remarks="项目id"/>
<column name="picture_url" type="varchar(64)" remarks="图片地址"/>
<column name="picture_url_32" type="varchar(64)" remarks="图片地址32位"/>
<column name="picture_url_64" type="varchar(64)" remarks="图片地址64位"/>
</createTable>
</changeSet>
</databaseChangeLog>
Если ваш проект с самого начала использует liquibase, вы можете написать его, как указано выше, и написать все операторы построения таблиц в журнале изменений.
Если поначалу это бесполезно, и вы хотите внедрить liquibase позже, вы можете экспортировать предыдущую базу данных в sql, а затем импортировать файл 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">
<include file="liquibase/changelogs/project.sql" relativeToChangelogFile="false"/>
</databaseChangeLog>
Прямой экспорт файла базы данных проектаproject.sqlпройти черезincludeПредставьте этикетку.
если<include>То, как sql-файл сообщает об ошибке, можно представить по-другому, используя<sqlFile>Этикетка
<?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.1.xsd">
<changeSet id="1" author="solo">
<sqlFile path="classpath:/liquibase/changelogs/project.sql" encoding="UTF-8" />
</changeSet>
</databaseChangeLog>
Это все, что нужно SpringBoot для интеграции Liquibase.
Если у вас есть какие-либо вопросы или хорошие предложения, вы можете добавить WX для связи:douglas1840