Tutorial - Create a beforeMigrate SQL callback
Published 17 September 2025
The following tutorial uses a disposable H2 database connection and associated SQL syntax (e.g. with JDBC URL jdbc:h2:file:./foobardb )
Creating a callback
Let's create a callback to flush all data to disk before a migration run. To do so, we'll make use of Flyway's beforeMigrate callback.
Make sure that you have the following setting configured in your toml configuration file:
callbackLocations = ["filesystem:callbacks"]
So go ahead and create beforeMigrate.sql in the /callbacks directory:
CHECKPOINT SYNC;
Triggering the callback
To trigger the execution of the callback, we'll clean and migrate our database.
So go ahead and invoke
flyway-11.12.0> flyway clean migrateThis will give you output similar to the following:
Database: jdbc:h2:file:./foobardb (H2 1.4) Successfully cleaned schema "PUBLIC" (execution time 00:00.003s) Successfully validated 2 migrations (execution time 00:00.010s) Executing SQL callback: beforeMigrate Creating Schema History table: "PUBLIC"."flyway_schema_history" Current version of schema "PUBLIC": << Empty Schema >> Migrating schema "PUBLIC" to version 1 - Create person table Migrating schema "PUBLIC" to version 2 - Add people Successfully applied 2 migrations to schema "PUBLIC" (execution time 00:00.034s)
As expected we can see that the beforeMigrate callback was triggered and executed successfully before the migrate operation. Each time you invoke migrate again in the future, the callback will now be executed again.
It is not yet possible to create callbacks within Flyway Desktop, although they will be honored if present.
Open the project folder on the filesystem and follow the same steps as for the command line, in order to create the callbacks.