'How to fire liquibase rollback script from spring application

I am using spring with liquibase to update my database. Since know I have not need to user rollback functonality, but the times come where I would like to make it work. But I cant seems to fire it from my application.

I know that maven has plugin which helps with that, but until know I was not using it and when I add it I need to provide source and credentials to my database.

In this moment liquibase is configured in xml.

<bean id="liquibase" class="liquibase.integration.spring.SpringLiquibase">
  <property name="dataSource" ref="p6spyDataSource"/>
  <property name="changeLog" value="classpath:db.changelog-master.yaml"/>
  .
  .
</bean>

And in maven I have only dependency to liquibase-core. And the place where I set liquibase.shouldRun is in application.properties

DataSource is taken from TomEE configuration server.xml file

So the question is if I can maybe somehow add maven plugin without adding credentials (should be taken from dataSource). Or is there other way to run rollback script from my changelog?



Solution 1:[1]

There are several related questions that have been posted previously about using Liquibase rollback with Spring Boot. This one seems the most similar to your post: Perform a liquibase:rollback from the command line when properties are in Spring-boot files (application.properties) and not liquibase.properties

Here is the answer as provided by Robert Kleinschmager:

The property names within springs application.properties and liquidate.properties are not compatible. You have three options

#1 just create a separate liquibase.properties file with the content you need - see liquibase doc as you only need to fix your current setup #2 give the database parameters via command-line arguments

mvn liquibase:rollback -Dliquibase.rollbackCount=1    -Dliquibase.url=jdbc:postgresql://localhost:5432/comptesfrance -Dliquibase.username

see rollback goal for all arguments

#3 if you need a permanent solution, then you may add the liquibase properties into your application.properties and reuse them in the same file. i.e.

liquibase.url=jdbc:postgresql://localhost:5432/comptesfrance
spring.datasource.url=${liquibase.url}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 tabbyfoo