Есть ли простой способ изолировать контекст для выполнения Liquibase при развертывании? - PullRequest
0 голосов
/ 25 марта 2019

Я определяю архитектуру для нового сервиса, который будет использовать Spring Boot. Я ищу способ настроить развертывания Liquibase для выполнения только с определенным активным профилем. Я также хотел бы отключить все другие компоненты, если это возможно, чтобы избежать действий со стороны логики сервиса до завершения развертывания базы данных.

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

Вот моя конфигурация:

spring:
  application:
    name: liquibase-spring-postgres-example
  liquibase:
    enabled: false
---
spring:
  profiles: dev
  datasource:
    username: ${service_user}
    password: ${DATASOURCE_DB_PASS}
    url: jdbc:postgresql://{db}:{port}/schema
  liquibase:
    url: jdbc:postgresql://{db}:{port}/schema
---
spring:
  profiles: liquibase
  datasource:
    ## provided to get spring boot to start up
    url: jdbc:postgresql://{db}:{port}/schema
  liquibase:
    user: ${liquibase_user}
    password: ${LIQUIBASE_DB_PASS}
    contexts: release
    enabled: true

Я попытался отключить такие вещи, как встроенный сервер Jetty, с помощью комментария, который нашел здесь :

spring:
...
  main:
    web-application-type: none

Существуют ли методы помимо определения экстремального профиля для всех bean-компонентов или ручного запуска Liquibase вне Spring Boot, чтобы сделать это возможным?

1 Ответ

1 голос
/ 25 марта 2019

Чтобы выполнить сценарии для файла JAR Spring-boot, вам должно помочь что-то вроде этого:

java -cp /path/to/spring-boot-fat.jar \
    -Dloader.system=true \
    -Dloader.main=liquibase.integration.commandline.Main \
    org.springframework.boot.loader.PropertiesLauncher \
    --changeLogFile=db/changelog/db-changelog-master.xml \
    --driver=org.h2.Driver \
    --url="jdbc:h2:~/h2db/liquibase-test;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" \
    --password=sa \
    --username=sa \
    updateSQL

edit: это было проверено на spring-boot 1.5.x, но я думаю, что оно должно работать снова в 2.x.

...