Spring boot - disable Liquibase at startup

JavaSpring BootMavenLiquibase

Java Problem Overview


I want to have Liquibase configured with my Spring Boot application, so I added dependencies to pom.xml and set the path to master.xml in application.properties. This works fine and Spring Boot runs Liquibase at startup. The problem is that now I want to run Liquibase manually, not at startup of application. Should I completely disable auto-configuration for Liquibase or can I use it and only disable running evaluations at startup?

Java Solutions


Solution 1 - Java

The relevant property name has changed between Spring versions:

  • For Spring 4.x.x: the liquibase.enabled=false application property disables Liquibase.

  • For Spring 5.x.x: the spring.liquibase.enabled=false application property disables Liquibase.


P.S. And for Flyway:

  • Spring 4.x.x: flyway.enabled=false

  • Spring 5.x.x: spring.flyway.enabled=false

Solution 2 - Java

Add liquibase.enabled=false in your application.properties file

Reference

But if you don't want to use liquibase from application anymore, remove liquibase starter altogether from pom.

Solution 3 - Java

If you see on the LiquibaseProperties, there is a prefix like

 prefix = "spring.liquibase"

So, My suggestion is to use

spring.liquibase.enabled=false

It solved my problem with spring boot 2.0.0.RC1

Solution 4 - Java

I faced an issue where I wasn't able to disable Liquibase from properties for some reason, so this is how I disabled Liquibase with @Bean annotation:

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

Solution 5 - Java

There is one more programmatic approach.

@EnableAutoConfiguration(exclude = LiquibaseAutoConfiguration.class)

on Application main class

Solution 6 - Java

If you want to run Liquibase manually, you could use the liquibase maven plugin. Just add something like this to your 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>

You can take a look at the plugin documentation for the configuration details.

And don't use the liquibase support from Spring Boot, as it is only meant to be used in runtime. Just remove the liquibase starter and/or any related dependencies as you'll only need the maven plugin.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGravianView Question on Stackoverflow
Solution 1 - JavaAlex ShesterovView Answer on Stackoverflow
Solution 2 - JavaSangram JadhavView Answer on Stackoverflow
Solution 3 - Javamaruf571View Answer on Stackoverflow
Solution 4 - JavaDávid ElekView Answer on Stackoverflow
Solution 5 - JavaAbhishek ChatterjeeView Answer on Stackoverflow
Solution 6 - JavaCèsarView Answer on Stackoverflow