Database / Liquibase interview questions
How do you use Liquibase with multiple databases or schemas in a single application?
When an application uses multiple databases or schemas — for example, a multi-tenant SaaS app with one schema per tenant, or an application split across a billing schema and a product schema — Liquibase can manage each independently. The key is that each schema/database gets its own DATABASECHANGELOG table and its own Liquibase execution context.
In Spring Boot with multiple data sources, you configure multiple Liquibase beans manually since Spring Boot's auto-configuration only handles one:
@Configuration public class LiquibaseConfig { @Bean @Primary public SpringLiquibase primaryLiquibase( @Qualifier("primaryDataSource") DataSource primaryDataSource) { SpringLiquibase liquibase = new SpringLiquibase(); liquibase.setDataSource(primaryDataSource); liquibase.setChangeLog("classpath:db/changelog/primary/db.changelog-master.xml"); return liquibase; } @Bean public SpringLiquibase billingLiquibase( @Qualifier("billingDataSource") DataSource billingDataSource) { SpringLiquibase liquibase = new SpringLiquibase(); liquibase.setDataSource(billingDataSource); liquibase.setChangeLog("classpath:db/changelog/billing/db.changelog-master.xml"); return liquibase; } }
For per-tenant schema provisioning in multi-tenant applications, a common pattern is running Liquibase programmatically when a new tenant is created, using the tenant's schema name:
public void provisionTenantSchema(String schemaName) { SpringLiquibase liquibase = new SpringLiquibase(); liquibase.setDataSource(sharedDataSource); liquibase.setChangeLog("classpath:db/changelog/tenant/db.changelog-master.xml"); liquibase.setDefaultSchema(schemaName); liquibase.afterPropertiesSet(); // triggers migration immediately }
Each schema gets its own DATABASECHANGELOG in that schema, keeping migrations isolated even when sharing a single database server.
More Related questions...