Spring boot - 在启动时禁用 Liquibase

Posted

技术标签:

【中文标题】Spring boot - 在启动时禁用 Liquibase【英文标题】:Spring boot - disable Liquibase at startup 【发布时间】:2016-10-09 01:19:07 【问题描述】:

我想用我的 Spring Boot 应用程序配置 Liquibase,所以我将依赖项添加到 pom.xml 并将路径设置为 application.properties 中的 master.xml。这工作正常,Spring Boot 在启动时运行 Liquibase。问题是现在我想手动运行 Liquibase,而不是在应用程序启动时。我应该完全禁用 Liquibase 的自动配置,还是可以使用它并且只在启动时禁用运行评估?

【问题讨论】:

【参考方案1】:

Spring 版本之间相关属性名称发生了变化:

对于 Spring 4.x.xliquibase.enabled=false 应用程序属性禁用 Liquibase。

对于 Spring 5.x.xspring.liquibase.enabled=false 应用程序属性禁用 Liquibase。


附:对于 Flyway:

春季 4.x.xflyway.enabled=false

春季 5.x.xspring.flyway.enabled=false

【讨论】:

【参考方案2】:

在您的 application.properties 文件中添加 liquibase.enabled=false

Reference

但是,如果您不想再从应用程序中使用 liquibase,请从 pom 中完全删除 liquibase starter。

【讨论】:

此属性已迁移到 spring.liquibase.enabled【参考方案3】:

如果你在 LiquibaseProperties 上看到,有一个前缀像

 prefix = "spring.liquibase"

所以,我的建议是使用

spring.liquibase.enabled=false

它解决了我的 spring boot 2.0.0.RC1 问题

【讨论】:

【参考方案4】:

我遇到了一个问题,由于某种原因我无法从属性中禁用 Liquibase,所以这就是我使用 @Bean 注释禁用 Liquibase 的方法:

@Bean
public SpringLiquibase liquibase() 
  SpringLiquibase liquibase = new SpringLiquibase();
  liquibase.setShouldRun(false);
  return liquibase;

【讨论】:

在此之后我收到了org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'liquibase' available 这对我有用。它是使 SpringLiquibase bean 可用于自动装配而无需在启动时运行的唯一解决方案。记得把它放在一个@Configuration 类中。【参考方案5】:

还有一种程序化方法。

@EnableAutoConfiguration(exclude = LiquibaseAutoConfiguration.class)

关于应用程序主类

【讨论】:

【参考方案6】:

如果你想手动运行 Liquibase,你可以使用 liquibase maven 插件。只需在您的 pom.xml 中添加类似这样的内容:

  <plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>$liquibase.version</version>
    <configuration>
      <changeLogFile>src/main/liquibase/master.xml</changeLogFile>
      <propertyFile>src/main/liquibase/liquibase.properties</propertyFile>
      <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
    </configuration>
  </plugin>

您可以查看plugin documentation了解配置详情。

不要使用 Spring Boot 的 liquibase 支持,因为它仅用于运行时。只需删除 liquibase 启动器和/或任何相关依赖项,因为您只需要 maven 插件。

【讨论】:

这个问题是,当spring boot在类路径上找到liquibase时,它会尝试在启动afaik时执行。 这就是为什么你必须删除 liquibase starter,或者如果你添加了任何直接的 liquibase 依赖项。如果您只有 liquibase maven 插件,则 liquibase 不在应用程序类路径中。

以上是关于Spring boot - 在启动时禁用 Liquibase的主要内容,如果未能解决你的问题,请参考以下文章

如何在使用 Spring Boot 的 JWT 令牌时禁用同一用户帐户的多个登录

spring boot/batch 通过代码禁用批量自动启动

禁用 Spring Boot 启动器 Cassandra 进行单元测试

在spring boot / spring data elasticsearch中禁用自动索引创建

Spring Boot新模块devtools

关于spring boot如何正确禁用web环境