DB Migration runner (similar to FlywayDB) which can be used standalone or with Ebean (to run DB Migrations on EbeanServer start)
To use firstly create a MigrationConfig and set properties, then create and run MigrationRunner.
MigrationConfig config = new MigrationConfig();
config.setDbUsername("sa");
config.setDbPassword("");
config.setDbUrl("jdbc:h2:mem:db1");
// or load from Properties
Properties properties = ...
config.load(properties);
// run it ...
MigrationRunner runner = new MigrationRunner(config);
runner.run();Then create a run a MigrationRunner. When running the database connection can either be:
- Passing a Connection explicitly
- Creating a connection (by specifying JDBC Driver and URL on MigrationConfig)
- Passing a DataSource (MigrationConfig dbUsername and dbPassword used)
Connection connection = ...;
MigrationRunner runner = new MigrationRunner(config);
// pass explicit connection
runner.run(connection); DataSource dataSource = ...;
MigrationRunner runner = new MigrationRunner(config);
// pass a dataSource
runner.run(dataSource); MigrationRunner runner = new MigrationRunner(config);
runner.run();MigrationConfig migrationPath is the root path (classpath or filesystem) where the migration scripts are searched for.
MigrationConfig config = createMigrationConfig();
// load .sql migration resources from a file system location
config.setMigrationPath("filesystem:my-directory/dbmigration");DB Migration runner follows the FlywayDB conventions and supports running "Versioned" migrations and "Repeatable" migrations.
dbmigration
dbmigration/1.1__initial.sql
dbmigration/1.2__add_some_stuff.sql
dbmigration/R__create_views_repeatable.sql"Repeatable migrations" start with R__ and execute if they have not been or if their content has changed (using a Md5 checksum).
"Version migrations" start with V (or not) and have a version number (1.2 etc) followed by double underscore __ and then a comment.
Set ebean.migration.rebaseMigrationHistory=true for a one-time rebase after compacting
existing migrations. The runner keeps its internal bootstrap row, deletes all other migration
history, and records every migration currently found under migrationPath with its normal
checksum without executing any migration SQL.
This is destructive and must only be used when the existing database schema is known to match
the replacement migrations. dbinit resources are not included. Remove the setting after the
rebase; otherwise future migrations will be recorded without being executed.