Prevent Liquibase migrating public schema in Postgres and only migrate configured schemas

Viewed 7

I'm using org.postgresql:postgresql:42.1.4 with an instance of the official Postgres Docker image running via docker-compose.

The database has the public schema by default, and I manually create schemas; 001 and 002 each for a separate tenant.

The problem is that on application start-up, Liquibase executes the changelogs against public.

How I can get Liquibase to only execute the changelogs against the 2 configured schemas? i.e 001 and 002

My Liquibase configuration to run migration changelogs on application start-up:

@Configuration
@EnableConfigurationProperties({LiquibaseProperties.class})
public class LiquibaseConfiguration {

  private final Logger log = LoggerFactory.getLogger(LiquibaseConfiguration.class);

  private final Environment env;

  public LiquibaseConfiguration(Environment env) {
    this.env = env;
  }

  @Bean
  public SpringLiquibase liquibase(@Qualifier("taskExecutor") TaskExecutor taskExecutor,
      DataSource dataSource, LiquibaseProperties liquibaseProperties) {
    SpringLiquibase liquibase = new SpringLiquibase();
    liquibase.setDataSource(dataSource);
    liquibase.setChangeLog("config/liquibase/changelog/changelog-root.xml");
    return liquibase;
  }

  @Bean
  @DependsOn("liquibase") // ensure execution after SpringLiquibase Bean
  public MultiTenantSpringLiquibase liquibaseMt(DataSource dataSource, LiquibaseProperties liquibaseProperties) {

    MultiTenantSpringLiquibase liquibase = new MultiTenantSpringLiquibase();
    liquibase.setDataSource(dataSource);
    liquibase.setChangeLog("config/liquibase/changelog/changelog-root.xml");
    liquibase.setSchemas(Arrays.asList("001", "002"));
    return liquibase;
  }
}

And a default DataSource:

@Configuration
public class DataSourceConfig {

  @Bean
  public DataSource getDataSource() {
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
    dataSourceBuilder.driverClassName("org.postgresql.Driver");
    dataSourceBuilder.url("jdbc:postgresql://localhost:5432/postgres");
    dataSourceBuilder.username("postgres");
    dataSourceBuilder.password("");
    return dataSourceBuilder.build();
  }
}
0 Answers
Related