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

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

【问题讨论】:

    标签: java spring-boot maven 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 不在应用程序类路径中。
          猜你喜欢
          • 2022-11-11
          • 1970-01-01
          • 1970-01-01
          • 2017-06-17
          • 1970-01-01
          • 2021-02-12
          • 1970-01-01
          • 2018-01-20
          • 2020-04-14
          相关资源
          最近更新 更多