Spring Boot:在不启动应用程序的情况下运行liquibase迁移

时间:2018-03-28 10:55:26

标签: java spring-boot liquibase

在Spring Boot中,the documentation似乎鼓励在应用启动时运行迁移。

这很好,但有时应用启动可能有副作用/依赖,我不想打扰 - 我只想自己运行迁移。想想只需设置一个本地开发数据库,​​即可在其中运行,甚至无需运行应用程序。

相比之下,在Dropwizard中,单独运行迁移is straightforward,其中包含应用程序的内置参数,如此

java -jar hello-world.jar db migrate helloworld.yml

Spring Boot有什么相同的东西吗?或者我只需要下拉并直接运行liquibase?

我对直接回答感兴趣,但也有兴趣了解我是否误解了更高层次的事情 - 比如这种在创业公司上运行的方法通常会更好&# 39;由于某些原因我还没有发现,所以你只是鼓励Spring Boot作为设计选择这样做。

5 个答案:

答案 0 :(得分:0)

对我来说,在启动时运行liquibase的主要原因是实现自动化,即无需在所有环境中手动运行迁移。想想CI构建,您只需要确保您的数据库更改将应用​​于您的应用将要部署到的任何环境。

答案 1 :(得分:0)

This answer提到了一个在Liquibase之后运行的钩子。在这个问题中,它被用来填充数据库,可能带有测试值或默认值。

@Bean
@DependsOn("liquibase")
public YourBean yourBean() {
    return new YourBean();
}

static class YourBean {

    @PostConstruct
    public void shutdown() {
         // Exit your application here.
         );
    }

}

那行得通。我不知道,您甚至可能会访问liquibase模式,并且只能在“创建”时关闭。

答案 2 :(得分:0)

您可以使用不同的 Spring 配置文件:例如,使用名为“init”的配置文件将激活“liquibase”配置文件。

application.yml:(默认禁用 Liquibase)

spring:
  liquibase:
    enabled: false

application-init.yml:(不运行web容器,所以spring启动后会自动关闭)

spring:
  profiles:
    include: liquibase
  main:
    web-application-type: none

spring-liquibase.yml:(启用 liquibase)

spring:
  liquibase:
    enabled: true
    change-log: classpath:/db/changelog/changelog.xml

此设置允许您将 Liquibase 作为 init 容器运行 (spring.profiles.active=init),但如果您愿意,您仍然可以将 Liquibase 作为 Web 应用程序的一部分运行 (spring.profiles.active=liquibase) .

答案 3 :(得分:0)

一般来说,在应用程序启动时运行迁移可能会减少工作量,特别是如果您使用的是 Spring Boot 并且所有这些都为您设置好了。然后您可以停止该应用程序。

但是,如果您真的想在没有 Spring Boot 应用程序的情况下运行迁移,您可以使用 Liquibase Gradle 和 Maven 插件: https://github.com/liquibase/liquibase-gradle-plugin https://docs.liquibase.com/tools-integrations/maven/home.html

这将要求您在另一个配置文件中设置数据库凭据,以及您的应用程序配置,以便插件可以连接到数据库。

答案 4 :(得分:0)

为此,我们创建了自己的脚本,不仅允许生成迁移,还允许手动应用它们,但它只能从 gradle 应用,请参阅: https://github.com/Wissance/SpringUu

要应用更新,我们使用以下命令:

.\gradlew.bat update -PrunList='changesApply'

指定数据库连接编辑gradle部分更改应用

有关我们工具的更多详细信息,请参阅文章:

https://m-ushakov.medium.com/code-first-with-spring-boot-hibernate-and-liquibase-48f5c9998d95