Database / Liquibase interview questions
How do you manage Liquibase changeLog files in a multi-module Maven project?
In a multi-module Maven project (common in microservices or modular monolith architectures), each module typically manages its own schema. The recommended approach is to have each module own a separate changeLog tree under its src/main/resources, and then compose them from a top-level root changeLog if the modules share a single deployment unit — or treat each module's changeLog independently if they each deploy their own schema.
A typical structure for a shared-schema approach:
src/main/resources/ db/ changelog/ db.changelog-master.xml <-- root changeLog releases/ v1.0/ 01-create-user-table.xml 02-create-order-table.xml v1.1/ 03-add-status-column.xml 04-add-index-on-email.xml v2.0/ 05-create-payment-table.xml
The root changeLog uses <includeAll> or ordered <include> tags:
<databaseChangeLog ...> <includeAll path="db/changelog/releases/v1.0/"/> <includeAll path="db/changelog/releases/v1.1/"/> <includeAll path="db/changelog/releases/v2.0/"/> </databaseChangeLog>
For microservices where each service has its own database, each service's changeLog is entirely independent and deployed only with that service. There is no shared root changeLog. In this case, each service configures its own spring.liquibase.change-log pointing to its own changeLog file.
One important consideration with includeAll: Liquibase processes files alphabetically within the included directory. Use a numeric prefix on file names to ensure deterministic ordering. Do not rely on filesystem order — it can vary across operating systems and CI environments.
More Related questions...