Миграции для Java
Я использую как ruby на рельсах, так и на Java. Мне действительно нравится использовать миграции, когда я работаю над проектом rails. так что мне интересно, есть ли миграция как инструмент для Java? Если такого инструмента нет, будет ли хорошей идеей использовать миграции в качестве инструмента для управления базой данных, используемой проектом Java?
8 ответов
Я использовал SchemaUpdate Hibernate для выполнения той же функции, что и миграции. На самом деле это проще, чем миграция, потому что каждый раз, когда вы запускаете свое приложение, оно проверяет структуру базы данных и синхронизирует ее с вашими сопоставлениями, поэтому никаких дополнительных граблей нет: db: migrate step и ваше приложение никогда не может быть не синхронизировано с базой данных, которую оно запускает против. Файлы отображения 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. Мне было бы интересно прочитать любые сравнения этих инструментов.
Некоторые другие релевантные ресурсы: несколько устаревшая статья Мартина Фаулера и Прамода Садаляжа по эволюционному проектированию баз данных, а также книга " Рефакторинг баз данных: эволюционный дизайн баз данных", написанная Sadalage и Scot Ambler
Есть также две независимые реализации рельсовых миграций для Java:
1) Мавенские миграции из Carbon Five
2) Муравьиные задания от Hashrocket (мой личный фаворит)
Хотя эти пакеты были написаны специально для Maven и Ant, с некоторыми работами вы можете адаптировать их практически ко всему.
Migrate4j выглядит как кандидат, но проект не выглядит достаточно зрелым для промышленного использования.
Существует также DbMaintain, который изначально разрабатывался внутри Unitils, но теперь это отдельный проект. В настоящее время мы используем его и очень довольны (что не означает, что нет хороших альтернатив). Я перечисляю больше из них в своей базе данных + закладки миграции (с акцентом на инструменты, поддерживающие Maven).