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.x:liquibase.enabled=false
应用程序属性禁用 Liquibase。
对于 Spring 5.x.x:spring.liquibase.enabled=false
应用程序属性禁用 Liquibase。
附:对于 Flyway:
春季 4.x.x:flyway.enabled=false
春季 5.x.x:spring.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 进行单元测试