...

среда, 20 августа 2014 г.

[Из песочницы] Использование liuibase плагина для Maven

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

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


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



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



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


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



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



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



<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://ift.tt/IH78KX"
xmlns:xsi="http://ift.tt/ra1lAU"
xsi:schemaLocation="http://ift.tt/IH78KX http://ift.tt/VE5zRx">
<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://ift.tt/1apskEz"
xmlns:xsi="http://ift.tt/ra1lAU"
xsi:schemaLocation="http://ift.tt/1apskEz
http://ift.tt/1vfWzUi">

<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://ift.tt/1apskEz"
xmlns:xsi="http://ift.tt/ra1lAU"
xsi:schemaLocation="http://ift.tt/1apskEz
http://ift.tt/1vfWzUi">

<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>.


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


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



<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://ift.tt/IH78KX"
xmlns:xsi="http://ift.tt/ra1lAU"
xsi:schemaLocation="http://ift.tt/IH78KX http://ift.tt/VE5zRx">
<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>


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий