Использование 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://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>.

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

Ниже приведу пример полностью сконфигурированного 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> 

ссылка на оригинал статьи http://habrahabr.ru/post/233973/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *