#spring-boot #liquibase
Вопрос:
У меня есть проект весенней загрузки, который изначально использует команду hibernate.ddl-auto: update для создания схемы. Теперь я хочу перейти на liquibase, поэтому для этого выполните следующие действия:
- запустил
diffChangeLog
cmd для создания существующей схемы -> сгенерирован в папке db/список изменений. - запустив
changelogSync
cmd, я смог создать таблицу, связанную с liquibase(список изменений и блокировка), и все существующие инструкции insert, связанные со схемой, также были вставлены.
Пока все хорошо. теперь я хочу перенести это изменение в производство, когда мой проект spring boot запускается, он должен автоматически запускать changelogSync
команду перед запуском, а затем загружаться в проект, так что мне не нужно запускать эти команды вручную. как я могу этого достичь?
Ответ №1:
Что касается diffChangeLog, то он используется для указания на различия в целом и генерирует изменения для устранения большинства из них. Если команды changeLogSync ТОЛЬКО помечают все нераскрытые изменения в вашем списке изменений как выполненные в вашей базе данных, они не развертывают никаких изменений. Из того, что я понимаю, это не лучший подход для переноса базы данных.
Ответ №2:
Есть 2 способа, которыми вы можете воспользоваться. Измените свой конвейер(в jenkins, bamboo или любом другом инструменте), чтобы вы могли выполнить changelogSync
его еще до запуска приложения(преимущество этого заключается в том, что команда liquibase полностью отделена от вашего приложения). Второй подход заключается в реализации CommandLineRunner
следующего:
@Component
public class CommandLineAppStartupRunner implements CommandLineRunner {
@Override
public void run(String...args) throws Exception {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("liquibase changelogSync");//or any other command
}
}
Вы даже можете передать свою команду в качестве аргумента исполнителю командной строки, если хотите.