- PVSM.RU - https://www.pvsm.ru -
В данной заметке я покажу, как запускать DBDeploy из скрипта Gradle.
Возможно, вы уже слышали о версионированной миграции структуры баз данных. Об этом писали на хабре [1]. DBDeploy [2] — один из самых простых и известных инструментов, позволяющий легко установить все последние изменения в базе данных на любом инстансе и любой девелоперской машине. А Gradle [3] — модный ныне инструмент для сборки проекта (как Ant и Maven, только лучше). О нём тоже уже писали [4].
Вопрос в том, как запускать DBDeploy из скрипта Gradle? У DBDeploy есть таски для Ant и плагин для Maven, но пока ещё нет плагина для DBdeploy (точнее, он в зачаточном состоянии). Немного потыркавшись, я пришёл к выводу, что самый простой способ — это использовать тот самый Ant таск DBDeploy из скрипта Gradle (здесь [5] описано, как из gradle-скрипта использовать любые Ant-таски). Рассмотрим пример.
Допустим, наш проект имеет следующую структуру. В папке «db» хранятся SQL-скрипты:
Тогда мы можем создать Gradle-скрипт с 3 тасками:
project.ext {
dbDriver = 'com.mysql.jdbc.Driver'
dbUrl = 'jdbc:mysql:///habrahabr'
dbUsername = 'habra'
dbPassword = 'habr'
}
task updateDatabase << {
ant.taskdef(name: 'dbdeploy',
classname: 'com.dbdeploy.AntTarget',
classpath: configurations.compile.asPath)
ant.dbdeploy(driver: dbDriver,
url: dbUrl,
userid: dbUsername,
password: dbPassword,
dir: 'db',
dbms: 'mysql',
undooutputfile: 'db/undo_last_change.sql')
}
<b>task createChangelogTable</b> << {
ant.sql(driver: dbDriver,
url: dbUrl,
userid: dbUsername,
password: dbPassword,
encoding: 'UTF-8',
classpath: configurations.compile.asPath) {
fileset(file: 'db/create_changelog_table.sql')
}
}
<b>task undoLastChange</b> << {
ant.sql(driver: dbDriver,
url: dbUrl,
userid: dbUsername,
password: dbPassword,
encoding: 'UTF-8',
classpath: configurations.compile.asPath) {
fileset(file: 'db/undo_last_change.sql')
}
}
Таким образом у нас появилось 3 таска:
:createChangelogTable BUILD SUCCESSFUL
[ant:dbdeploy] dbdeploy 3.0M3 [ant:dbdeploy] Reading change scripts from directory /tmp/habr/gradle-dbdeploy/db... [ant:dbdeploy] Changes currently applied to database: [ant:dbdeploy] 1..61 [ant:dbdeploy] Scripts available: [ant:dbdeploy] 62..62 [ant:dbdeploy] To be applied: [ant:dbdeploy] 62..62 [ant:dbdeploy] Applying #62: 062_migrate_currency_to_eur.sql... [ant:dbdeploy] -> statement 1 of 5... [ant:dbdeploy] -> statement 2 of 5... [ant:dbdeploy] -> statement 3 of 5... [ant:dbdeploy] -> statement 4 of 5... [ant:dbdeploy] -> statement 5 of 5... [ant:dbdeploy] Generating undo scripts... BUILD SUCCESSFUL
:undoLastChange BUILD SUCCESSFUL
Теперь вы можете, один раз запустив «gradle createChangelogTable», запускать «gradle updateDatabase» каждый раз хоть после каждого изменения скриптов, а для отмены последних изменений использовать «gradle undoLastChange».
Gradle предоставляет очень лаконичный и читабельный синтаксис для билд-скриптов, DBDeploy предлагает простой и надёжный способ ставить изменения в БД. И они прекрасно сработались.
Удачного БДения!
Автор: asolntsev
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/16142
Ссылки в тексте:
[1] писали на хабре: http://habrahabr.ru/post/121265/
[2] DBDeploy: http://dbdeploy.com/
[3] Gradle: http://www.gradle.org/
[4] уже писали: http://habrahabr.ru/post/107558/
[5] здесь: http://www.gradle.org/docs/current/userguide/ant.html
Нажмите здесь для печати.