Я использую как рубины на рельсах, так и Java. Мне очень нравится использовать миграцию, когда я работаю над проектом rails. поэтому мне интересно, есть ли такие миграции, как инструмент для Java? Если такого инструмента нет, рекомендуется использовать миграцию в качестве инструмента для управления базой данных, используемой Java-проектом?Миграции для Java
ответ
Я использовал программу SchemaUpdate Hibernate для выполнения той же функции, что и миграции. На самом деле это проще, чем миграции, потому что каждый раз, когда вы запускаете свое приложение, он анализирует структуру базы данных и синхронизирует ее с вашими сопоставлениями, поэтому нет лишнего рейка: db: шаг переноса, и ваше приложение никогда не может быть не синхронизировано с базой данных, в которой он запущен против. Файлы сопоставления Hibernate не сложнее, чем миграции Rails, поэтому, даже если вы не использовали Hibernate в приложении, вы можете воспользоваться им. Недостатком является то, что он не такой гибкий, как откат, миграция вниз, запуск операторов DML. Как отмечается в комментариях, он также не отбрасывает таблицы или столбцы. Я запускаю отдельный метод для выполнения этих операций вручную в процессе инициализации Hibernate.
Я не понимаю, почему вы не могли использовать миграции Rails, хотя, если вы не возражаете против установки стека (Ruby, Rake, Rails), вам не придется прикасаться к вашему приложению.
Есть также две независимые реализации рельсам-подобных миграций для Java:
1) Maven на основе миграции из Carbon Five
2) Ant на основе задач из Hashrocket (мой личный фаворит)
Хотя эти пакеты были написаны специально для Maven и Ant, с некоторыми работами вы можете адаптировать их практически ко всему.
Hashrocket не был затронут с 2007 года. Продукт C5-db-миграции Carbon Five не обновлялся с 2010 года. – Green
Liquibase - еще один проект в этой области, который стоит проверить.
Migrate4j кажется кандидатом, но проект не выглядит достаточно зрелым для использования в производстве.
Я столкнулся с этим сообщением, исследуя тот же вопрос. Я еще не пришел к выводам о лучшем инструменте или подходе, но один инструмент, с которым я столкнулся, который еще не упоминался в других ответах, - dbdeploy. Мне было бы интересно прочитать любые сравнения этих инструментов.
Другие релевантные ресурсы: Martin Fowler и Pramod Sadalage в возрасте от Evolutionary Database Design, а также книга Refactoring Databases: Evolutionary Database Design от Sadalage и Scot Ambler.
Для сравнения особенность между
- пролетного пути
- LiquiBase
- с5-DB-миграция
- dbdeploy
- mybatis
- MIGRATEdb
- migrate4j
- dbmaintain
- автопатча
посмотреть на http://flywaydb.org
Это должно быть хорошим началом для вас и кто-то еще, чтобы выбрать правильный инструмент для работы
Эй, я не знал пролетного пути. Это выглядит довольно интересно, и я буду более внимательно смотреть на него. Спасибо, что упомянул Flyway! –
@Pascal Thivent Спасибо за ваш комментарий! Если вы оцениваете это, я был бы рад услышать ваше мнение/критику/предложения об этом, либо здесь, либо в треке Трекера Flyway :-) Я также рассмотрю добавление DbMaintain в матрицу сравнения, поскольку он выглядит как отличный конкурент ... –
Конечно, сделаю. И спасибо за добавление DbMaintain к сравнению, очень приятно иметь такую матрицу. –
Существует также DbMaintain, который был изначально разработан внутри Unitils, но теперь является выделенным проектом. В настоящее время мы используем его и очень довольны (это не означает, что нет хороших альтернатив). Я перечисляю их в моих записях database+migration (с акцентом на инструменты, поддерживающие Maven).
Инструменты, подобные этому, помогут нам быстрее развиваться и безопасно –
@Arthur Да, очень хорошо, что у нас есть и такие инструменты. Каскадные обновления схемы из одной среды в другую теперь для нас приятно :) –
Он не синхронизирует его на 100%. Он не изменяет столбцы, не удаляет столбцы или таблицы, не удаляет FK и т. Д. – cherouvim