Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot 1.4: Executing Method after Liquibase finished

I have a Spring Boot 1.4.0 based Project that uses Liquibase.

Is it possible to execute a Method AFTER liquibase finished?

Something like Bean Post Processor?

What i want to do is adding some data to my database when the application is started in development mode. In developement mode the application uses an in-memory h2 database, so liquibase has to create the tables before i can write my data.

like image 289
Yannic Klem Avatar asked Aug 08 '16 09:08

Yannic Klem


2 Answers

Spring Boot auto-configures a SpringLiquibase bean named liquibase. Any bean that depends on this bean will be created after Liquibase has finished. For example, you could use @PostConstruct to populate the database:

@Bean
@DependsOn("liquibase")
public YourBean yourBean() {
    return new YourBean();
}

static class YourBean {

    @PostConstruct
    public void populateDatabase() {
        System.out.println("This will be called after Liquibase has finished");
    }

}
like image 121
Andy Wilkinson Avatar answered Nov 16 '22 07:11

Andy Wilkinson


Another solution would be to let LiquiBase insert these things into your database - but only when running in dev-mode.

You can do this in LiquiBase by specifying a context="" attribute.

Another option would be to let LiquiBase only insert this test-data into your database when dbms="h2db" (forgot what the exact string is to select h2, check documentation please!)

Both are attributes on changesets.

This is my own preferred solution for this kind of scenarios.

like image 32
Tim van der Leeuw Avatar answered Nov 16 '22 09:11

Tim van der Leeuw