package io.dropwizard.migrations; import io.dropwizard.db.ManagedDataSource; import liquibase.Liquibase; import liquibase.database.Database; import liquibase.database.DatabaseConnection; import liquibase.exception.LiquibaseException; import liquibase.resource.ResourceAccessor; import java.sql.SQLException; public abstract class CloseableLiquibase extends Liquibase implements AutoCloseable { private final ManagedDataSource dataSource; CloseableLiquibase( String changeLogFile, ResourceAccessor resourceAccessor, Database database, ManagedDataSource dataSource ) throws LiquibaseException, SQLException { super(changeLogFile, resourceAccessor, database); this.dataSource = dataSource; } public CloseableLiquibase(String changeLogFile, ResourceAccessor resourceAccessor, DatabaseConnection conn, ManagedDataSource dataSource) throws LiquibaseException, SQLException { super(changeLogFile, resourceAccessor, conn); this.dataSource = dataSource; } @Override public void close() throws Exception { try { database.close(); } finally { dataSource.stop(); } } }