- PVSM.RU - https://www.pvsm.ru -

Использование liquibase плагина для Maven

Привет хабр, много было уже на писано на тему liquibase и Maven, но я не смог найти ничего про liquibase-maven-plugin и его настройку, а ведь это очень удобный плагин. Вот я и решил написать о том, как его настроить.

Плагин liquibase-maven-plugin предназначен для управления liquibase из Maven. Вот пример команды mvn liquibase:update, для обновления базы данных.

Для начала предлагаю разобраться с тем, что такое Maven и liquibase.

Использование liquibase плагина для Maven

Мавен — это инструмент для сборки Java проекта: компиляции, создания jar, создания дистрибутива программы, генерации документации. Более подробно о самом Maven можно прочитать в статье Apache Maven — основы [1]

Использование liquibase плагина для Maven

Liquibase — это система управления миграциями базы данных. Для ознакомления с liquiabase так же можно прочитать в статье Управление миграциями БД с Liquibase [2]

После того, как мы разобрались с Maven и liquibase, можно перейти к созданию maven проекта и настройке liquibase плагина.

Для начала создадим новый Maven проект, его структура будет выглядеть следующим образом:

Использование liquibase плагина для Maven

Соответственно, pom файл, данного проекта, будет выглядеть:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>liquibaseTest</groupId>
    <artifactId>ru.test.liquibase</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

Далее в папке «src/main/resources» создадим папку «liquibase» в которой у нас будут храниться changelog файлы.

В папке liquibase создадим 2 файла:

  • db.changelog-master.xml — основной файл миграции, в него с помощью тега <include> включаются файлы ченджлогов каждой версии
  • db.changelog-0.1.0.xml — ченджлог файл, содержащий ченджсеты. Каждый ченджсет это одна транзакция

Рассмотрим данные файлы более подробно:

db.changelog-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.0.xsd">

    <include file="src/main/resources/liquibase/db.changelog-0.1.0.xml"/>
</databaseChangeLog>

В строке <include file="src/main/resources/liquibase/db.changelog-0.1.0.xml"/> мы подключаем db.changelog-0.1.0.xml файл с ченджсетами, в которых мы выполняем действия с базой данных.

db.changelog-0.1.0.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.0.xsd">

    <changeSet id="19082014-1" author="autor">
        <comment>
            Создание таблицы изображений
        </comment>
        <sql>
            CREATE TABLE images
            (
            id bigint NOT NULL,
            alt character varying(255),
            url_big character varying(255),
            url_small character varying(255),
            CONSTRAINT images_pkey PRIMARY KEY (id)
            )
        </sql>
    </changeSet>

</databaseChangeLog>

Теперь нам необходимо настроить liquibase plugin для Maven. Для этого открываем наш pom файл и добавляем туда:

        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.0.7</version>
                <configuration>
                    <changeLogFile>src/main/resources/liquibase/db.changelog-master.xml</changeLogFile>
                    <driver>org.postgresql.Driver</driver>
                    <url>jdbc:postgresql://localhost:5432/test</url>
                    <username>postgres</username>
                    <password>postgres</password>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>update</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>

В данной конфигурации мы подключаем liquibase-maven-plugin и для него определяем:

  • changeLogFile — путь до основного файла миграции
  • driver — драйвер для подключения к бд
  • url — url для подключения к бд
  • username — для подключения к бд
  • password — для подключения к бд

Внутри тега <goal>update</goal> мы определяем, что будем обновлять базу данных при сборке проекта, так же возможны и другие варианты.

Вот в принципе и все, ничего сложного нет. Теперь мы можем обновить нашу базу данных одной командой mvn liquibase:update, находясь в папке с проектом, или при сборке основного проекта. В данном случае будет использоваться <goal>update</goal>.

Более подробно о плагине можно прочитать на его официальном сайте [3].

Ниже приведу пример полностью сконфигурированного pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>liquibaseTest</groupId>
    <artifactId>ru.test.liquibase</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.liquibase</groupId>
                <artifactId>liquibase-maven-plugin</artifactId>
                <version>3.0.7</version>
                <configuration>
                    <changeLogFile>src/main/resources/liquibase/db.changelog-master.xml</changeLogFile>
                    <driver>org.postgresql.Driver</driver>
                    <url>${server.db.host}</url>
                    <username>${server.db.user}</username>
                    <password>${server.db.pass}</password>
                    <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                </configuration>
                <executions>
                    <execution>
                        <phase>process-resources</phase>
                        <goals>
                            <goal>update</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <finalName>liquibaseTest</finalName>
    </build>

</project>

Автор: PACCBET64

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/maven/67914

Ссылки в тексте:

[1] Apache Maven — основы: http://habrahabr.ru/post/77382/

[2] Управление миграциями БД с Liquibase: http://habrahabr.ru/post/178665/

[3] сайте: http://www.liquibase.org/documentation/maven/

[4] Источник: http://habrahabr.ru/post/233973/