Интеграция liquibase для существующего проекта Spring boot gradle

#spring-boot #liquibase

Вопрос:

У меня есть проект весенней загрузки, который изначально использует команду hibernate.ddl-auto: update для создания схемы. Теперь я хочу перейти на liquibase, поэтому для этого выполните следующие действия:

  1. запустил diffChangeLog cmd для создания существующей схемы -> сгенерирован в папке db/список изменений.
  2. запустив changelogSync cmd, я смог создать таблицу, связанную с liquibase(список изменений и блокировка), и все существующие инструкции insert, связанные со схемой, также были вставлены.

Пока все хорошо. теперь я хочу перенести это изменение в производство, когда мой проект spring boot запускается, он должен автоматически запускать changelogSync команду перед запуском, а затем загружаться в проект, так что мне не нужно запускать эти команды вручную. как я могу этого достичь?

Ответ №1:

Ответ №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
    }
}
 

Вы даже можете передать свою команду в качестве аргумента исполнителю командной строки, если хотите.