Миграции для Java

85

Использую и Ruby on rails, и Java. Мне очень нравится использовать миграции, когда я работаю над проектом rails. поэтому мне интересно, есть ли такой инструмент для миграции, как Java? Если такого инструмента нет, стоит ли использовать миграции в качестве инструмента для управления базой данных, используемой в проекте Java?

Джош Мур
источник

Ответы:

8

Я использовал SchemaUpdate Hibernate для выполнения той же функции, что и миграции. На самом деле это проще, чем миграция, потому что каждый раз, когда вы запускаете свое приложение, оно проверяет структуру базы данных и синхронизирует ее с вашими сопоставлениями, поэтому нет лишних граблей: шаг db: migrate, и ваше приложение никогда не может быть рассинхронизировано с базой данных, в которой оно запущено против. Файлы сопоставления Hibernate не сложнее миграции Rails, поэтому, даже если вы не использовали Hibernate в приложении, вы могли бы им воспользоваться. Обратной стороной является то, что он не так гибок, как откат, миграция вниз и выполнение операторов DML. Как указано в комментариях, он также не удаляет таблицы или столбцы. Я использую отдельный метод, чтобы сделать это вручную как часть процесса инициализации Hibernate.

Я не понимаю, почему вы не могли использовать миграции Rails - если вы не возражаете против установки стека (Ruby, Rake, Rails), вам не придется трогать свое приложение.

Брайан Детерлинг
источник
22
Он не синхронизирует его на 100%. Он не изменяет столбцы, не удаляет столбцы или таблицы, не удаляет FK и т. Д.
Cherouvim
88

Для сравнения функций между

  • Пролетной путь
  • Ликвибаза
  • c5-db-миграция
  • dbdeploy
  • mybatis
  • MIGRATEdb
  • migrate4j
  • dbmaintain
  • АвтоПатч

посмотрите http://flywaydb.org

Это должно стать хорошим началом для вас и всех остальных, чтобы выбрать правильный инструмент для работы.

Аксель Фонтен
источник
2
Эй, я не знал о Пролетном пути. Это выглядит довольно интересно, и я посмотрю на него поближе. Спасибо, что упомянули Flyway!
Паскаль Тивент,
@Pascal Thivent Спасибо за ваш комментарий! Если вы его оцените, я был бы рад услышать ваше мнение / критику / предложения по этому поводу здесь или в системе отслеживания проблем Flyway :-) Я также рассмотрю возможность добавления DbMaintain в матрицу сравнения, поскольку это выглядит как отличный конкурент ...
Axel Fontaine
Конечно я буду. И спасибо за добавление в сравнение DbMaintain, очень приятно иметь такую ​​матрицу.
Паскаль Тивент,
3
Спасибо, что разместили это. Я только сегодня начал пользоваться Flyway. Раньше я использовал Liquibase, и в одном проекте они использовали собственное решение. Flyway - это то, что я ожидал от Liquibase. Просто, без xml, и я могу писать более сложные миграции на java. Отлично. С нетерпением жду поддержки муравьев.
nogridbag
1
Текущая версия веб-сайта предназначена только для сравнения Flyway, Liquibase и MyBatis. Возможно ли полное сравнение где-нибудь еще?
Zero3
13

Liquibase - еще один проект в этой области, на который стоит обратить внимание.

Адам Монсен
источник
6

Я наткнулся на этот пост, исследуя тот же вопрос. Я еще не пришел к каким-либо выводам о лучшем инструменте или подходе, но один инструмент, с которым я столкнулся, который пока не упоминался в других ответах, - это dbdeploy . Мне было бы интересно прочитать любые сравнения этих инструментов.

Некоторые другие соответствующие ресурсы: несколько устаревшая статья Мартина Фаулера и Прамода Садаладжа об эволюционном проектировании баз данных и книга Садаладжа и Скота Амблера « Рефакторинг баз данных: эволюционный дизайн баз данных» .

Kief
источник
6

Также существуют две независимые реализации рельсовых миграций для Java:

1) Миграция на основе Maven с Carbon Five

2) Задачи на основе Ant от Hashrocket (мой личный фаворит)

Хотя эти пакеты были написаны специально для Maven и Ant, поработав, вы можете адаптировать их практически ко всему.

Винки
источник
5
Hashrocket не трогали с 2007 года. Продукт Carbon Five c5-db-migration не обновлялся с 2010 года.
Грин
4

Migrate4j кажется кандидатом, но проект не выглядит достаточно зрелым для производственного использования.

Reacuna
источник
2

Существует также DbMaintain, который изначально был разработан внутри Unitils, но теперь является специализированным проектом. В настоящее время мы используем его и очень довольны (что не означает, что нет хороших альтернатив). Я перечисляю больше из них в закладках базы данных + миграции (с упором на инструменты, поддерживающие Maven).

Паскаль Тивент
источник
1
Подобные инструменты помогут нам развиваться быстрее и безопаснее,
Артур Рональд
@Arthur Да, очень хорошо, что у нас тоже есть такие инструменты. Каскадное обновление схемы из одной среды в другую теперь доставляет нам удовольствие :)
Паскаль Тивент,