Database / Liquibase interview questions
What are contexts in Liquibase and how do you use them?
Contexts in Liquibase are labels you attach to a changeSet to control which environments it runs in. When you execute Liquibase and pass a context value (via command line, properties file, or Spring configuration), only the changeSets whose contexts match the active context will be executed. ChangeSets without a context attribute always run regardless of what context is active.
A common use case is seeding test or development data that should never touch production:
<changeSet id="seed-test-users" author="alice" context="test,dev"> <insert tableName="user"> <column name="id" value="1"/> <column name="email" value="testuser@example.com"/> </insert> </changeSet> <changeSet id="create-admin" author="alice" context="prod"> <insert tableName="user"> <column name="id" value="100"/> <column name="email" value="admin@company.com"/> </insert> </changeSet>
In Spring Boot you configure the active context with:
spring.liquibase.contexts=dev
Contexts support logical expressions like context="test or dev" and context="!prod". The ! (not) operator is useful for changeSets you want to run everywhere except production. This gives you a powerful mechanism for maintaining one changeLog that covers all environments without duplicating files or maintaining separate changeLog trees.
More Related questions...