Миграции для Java
Я использую как ruby on rails, так и Java. Мне очень нравится использовать миграцию, когда я работаю над проектом rails. поэтому мне интересно, есть ли такие миграции, как инструмент для Java? Если такого инструмента нет, рекомендуется использовать миграцию в качестве инструмента для управления базой данных, используемой Java-проектом?
Я использовал SchemaUpdate для Hibernate для выполнения той же функции, что и миграции. На самом деле это проще, чем миграции, потому что каждый раз, когда вы запускаете свое приложение, он анализирует структуру базы данных и синхронизирует ее с вашими сопоставлениями, поэтому нет лишнего рейка: db: шаг переноса, и ваше приложение никогда не может быть не синхронизировано с базой данных, в которой он запущен против. Файлы сопоставления Hibernate не сложнее, чем миграции Rails, поэтому, даже если вы не использовали Hibernate в приложении, вы можете воспользоваться им. Недостатком является то, что он не такой гибкий, как откат, миграция вниз, запуск операторов DML. Как отмечается в комментариях, он также не отбрасывает таблицы или столбцы. Я запускаю отдельный метод для выполнения этих операций вручную в процессе инициализации Hibernate.
Я не понимаю, почему вы не могли использовать Rails-миграции, хотя, если вы не против установки стека (Ruby, Rake, Rails), вам не придется прикасаться к вашему приложению.
Для сравнения характеристик
- пролетный путь
- LiquiBase
- c5-дб-миграция
- dbdeploy
- mybatis
- MIGRATEdb
- migrate4j
- dbmaintain
- автопатча
взгляните на http://flywaydb.org
Это должно стать хорошим началом для вас и для кого-либо другого, чтобы выбрать правильный инструмент для работы
Liquibase – это еще один проект в этой области, который стоит проверить.
У Grails есть утилита dbmigrate, которая формируется по образцу после Rails. Поскольку он реализован в Groovy, вы сможете использовать его из любого из ваших проектов Java.
Я просмотрел этот пост, исследуя тот же вопрос. Я еще не пришел к выводам о лучшем инструменте или подходе, но один инструмент, с которым я столкнулся, который пока не упоминался в других ответах, – это dbdeploy . Мне было бы интересно прочитать любые сравнения этих инструментов.
Некоторые другие релевантные ресурсы: Мартин Фаулер и пожизненная должность Прамода Садаладжа по разработке Эволюционной базы данных , а также книга « Рефакторинг баз данных: эволюционная разработка баз данных Садаладжем» и «Скот Амблер».
Существуют также две независимые реализации реляционных миграций для Java:
1) Переходы на основе Maven из Carbon Five
2) Задачи на основе Ant от Hashrocket (мой личный фаворит)
Хотя эти пакеты были написаны специально для Maven и Ant, с некоторой работой вы можете адаптировать их практически ко всему.
Migrate4j кажется кандидатом, но проект не выглядит достаточно зрелым для использования в производстве.
Существует также DbMaintain, который был первоначально разработан внутри Unitils, но теперь является специализированным проектом. В настоящее время мы используем его и очень довольны (это не означает, что нет хороших альтернатив). Я перечисляю их больше в моей базе данных + закладки миграции (с акцентом на инструменты, поддерживающие Maven).