Database migration tool that enables versioned database schema evolution with simple SQL scripts and Java migrations
npx @tessl/cli install tessl/maven-org-flywaydb--flyway-core@11.12.0Flyway is a database migration tool that provides reliable database schema evolution through versioned SQL scripts and Java migrations. It enables developers to manage database changes across all environments using simple SQL files or programmatic Java migrations, with automatic discovery and execution order management.
<dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>11.12.0</version></dependency>import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.configuration.FluentConfiguration;
import org.flywaydb.core.api.output.MigrateResult;For dependency injection frameworks:
import org.flywaydb.core.api.configuration.Configuration;
import org.flywaydb.core.api.MigrationInfoService;import org.flywaydb.core.Flyway;
// Configure and execute migrations
Flyway flyway = Flyway.configure()
.dataSource("jdbc:h2:mem:testdb", "sa", "")
.locations("classpath:db/migration")
.load();
// Execute migrations
flyway.migrate();
// Get migration information
flyway.info().all();For existing applications:
import org.flywaydb.core.Flyway;
import javax.sql.DataSource;
// Use existing DataSource
DataSource dataSource = getDataSource();
Flyway flyway = Flyway.configure()
.dataSource(dataSource)
.schemas("myschema")
.baselineOnMigrate(true)
.load();
flyway.migrate();Flyway is built around several key components:
Flyway class that orchestrates all database operationsPrimary database migration operations for schema evolution, validation, and maintenance.
public class Flyway {
public static FluentConfiguration configure();
public static FluentConfiguration configure(ClassLoader classLoader);
public MigrateResult migrate() throws FlywayException;
public void validate() throws FlywayException;
public ValidateResult validateWithResult() throws FlywayException;
public CleanResult clean();
public BaselineResult baseline() throws FlywayException;
public RepairResult repair() throws FlywayException;
public MigrationInfoService info();
public OperationResult undo() throws FlywayException;
public Configuration getConfiguration();
public <T extends ConfigurationExtension> T getConfigurationExtension(Class<T> configClass);
}Comprehensive configuration system for customizing migration behavior across all aspects of database operations.
public class FluentConfiguration {
public FluentConfiguration dataSource(String url, String user, String password);
public FluentConfiguration dataSource(DataSource dataSource);
public FluentConfiguration locations(String... locations);
public FluentConfiguration schemas(String... schemas);
public FluentConfiguration baselineVersion(MigrationVersion baselineVersion);
public FluentConfiguration baselineOnMigrate(boolean baselineOnMigrate);
public FluentConfiguration target(MigrationVersion target);
public FluentConfiguration target(String target);
public FluentConfiguration validateOnMigrate(boolean validateOnMigrate);
public FluentConfiguration cleanDisabled(boolean cleanDisabled);
public FluentConfiguration outOfOrder(boolean outOfOrder);
public Flyway load();
}
public interface Configuration {
public DataSource getDataSource();
public Location[] getLocations();
public String[] getSchemas();
public MigrationVersion getBaselineVersion();
}Framework for creating programmatic migrations with full access to database connections and configuration.
public interface JavaMigration {
public MigrationVersion getVersion();
public String getDescription();
public void migrate(Context context) throws Exception;
}
public abstract class BaseJavaMigration implements JavaMigration {
public final MigrationVersion getVersion();
public Integer getChecksum();
public boolean canExecuteInTransaction();
}
public interface Context {
public Configuration getConfiguration();
public Connection getConnection();
}Extensible lifecycle hooks enabling custom logic execution at any point during migration operations.
public interface Callback {
boolean supports(Event event, Context context);
void handle(Event event, Context context);
}
public abstract class BaseCallback implements Callback {
public boolean supports(Event event, Context context);
}
public enum Event {
BEFORE_MIGRATE, AFTER_MIGRATE, BEFORE_EACH_MIGRATE, AFTER_EACH_MIGRATE,
BEFORE_CLEAN, AFTER_CLEAN, BEFORE_VALIDATE, AFTER_VALIDATE,
BEFORE_BASELINE, AFTER_BASELINE, BEFORE_REPAIR, AFTER_REPAIR
}Comprehensive result objects and migration metadata providing detailed feedback on all operations.
public interface MigrationInfoService {
MigrationInfo[] all();
MigrationInfo current();
MigrationInfo[] pending();
MigrationInfo[] applied();
}
public interface MigrationInfo {
MigrationVersion getVersion();
String getDescription();
MigrationState getState();
Date getInstalledOn();
Integer getExecutionTime();
}Comprehensive exception hierarchy for handling migration failures and validation errors.
public class FlywayException extends RuntimeException {
public FlywayException(String message);
public FlywayException(String message, Throwable cause);
}
public class FlywayValidateException extends FlywayException {
public FlywayValidateException(ErrorDetails errorDetails, String validationError);
}
public interface ErrorDetails {
ErrorCode getErrorCode();
String getMessage();
}public class MigrationVersion implements Comparable<MigrationVersion> {
public static MigrationVersion fromVersion(String version);
public static final MigrationVersion LATEST;
public static final MigrationVersion CURRENT;
public String getVersion();
public int compareTo(MigrationVersion other);
}
public class Location {
public Location(String descriptor);
public String getDescriptor();
public String getPath();
public boolean isClassPath();
}
public enum MigrationState {
PENDING, ABOVE_TARGET, BELOW_BASELINE, BASELINE, SUCCESS,
FAILED, OUT_OF_ORDER, FUTURE_SUCCESS, FUTURE_FAILED
}public class MigrateResult extends HtmlResult {
public List<MigrateOutput> migrations;
public String initialSchemaVersion;
public String targetSchemaVersion;
public String schemaName;
public int migrationsExecuted;
public boolean success;
public String flywayVersion;
public String database;
public String databaseType;
public List<String> warnings;
public long getTotalMigrationTime();
public void addWarning(String warning);
public List<MigrateOutput> getPendingMigrations();
public List<MigrateOutput> getSuccessfulMigrations();
public List<MigrateOutput> getFailedMigrations();
}
public class HtmlResult implements OperationResult {
private String timestamp;
private String operation;
private String exception;
public Exception exceptionObject;
private boolean licenseFailed;
public String getOperation();
public String getException();
public boolean isLicenseFailed();
}
public class CleanResult extends HtmlResult {
public List<String> schemasCleaned;
public List<String> schemasDropped;
}
public class ValidateResult extends OperationResultBase {
public final ErrorDetails errorDetails;
public final List<ValidateOutput> invalidMigrations;
public final boolean validationSuccessful;
public final int validateCount;
public String getAllErrorMessages();
}