@@ -38,6 +38,7 @@ public class DatabaseConfiguration { | |||||
@Getter @Setter private HibernateConfiguration hibernate; | @Getter @Setter private HibernateConfiguration hibernate; | ||||
@Getter @Setter private boolean migrationEnabled = true; | @Getter @Setter private boolean migrationEnabled = true; | ||||
@Getter @Setter private boolean migrationBaselineOnly = false; | |||||
private final List<Runnable> postDataSourceSetupHandlers = new ArrayList<>(); | private final List<Runnable> postDataSourceSetupHandlers = new ArrayList<>(); | ||||
public void addPostDataSourceSetupHandler (Runnable handler) { postDataSourceSetupHandlers.add(handler); } | public void addPostDataSourceSetupHandler (Runnable handler) { postDataSourceSetupHandlers.add(handler); } | ||||
@@ -46,7 +46,8 @@ public class FlywayMigrationListener<C extends RestServerConfiguration> extends | |||||
// check to see if flyway tables exist | // check to see if flyway tables exist | ||||
final var flywayTable = getFlywayTableName(); | final var flywayTable = getFlywayTableName(); | ||||
final var baseline = checkIfBaseline(configuration, flywayTable); | |||||
final boolean baselineOnly = configuration.getDatabase().isMigrationBaselineOnly(); | |||||
final var baseline = baselineOnly || checkIfBaseline(configuration, flywayTable); | |||||
final var baselineVersion = baseline ? MigrationVersion.fromVersion(getBaselineVersion()) | final var baselineVersion = baseline ? MigrationVersion.fromVersion(getBaselineVersion()) | ||||
: MigrationVersion.EMPTY; | : MigrationVersion.EMPTY; | ||||
if (baseline) { | if (baseline) { | ||||
@@ -58,8 +59,8 @@ public class FlywayMigrationListener<C extends RestServerConfiguration> extends | |||||
final Flyway flyway = new Flyway(new FluentConfiguration() | final Flyway flyway = new Flyway(new FluentConfiguration() | ||||
.dataSource(dbConfig.getUrl(), dbConfig.getUser(), dbConfig.getPassword()) | .dataSource(dbConfig.getUrl(), dbConfig.getUser(), dbConfig.getPassword()) | ||||
.skipDefaultResolvers(skipDefaultResolvers()) | |||||
.resolvers(resolvers != null ? resolvers : new MigrationResolver[0]) | |||||
.skipDefaultResolvers(baselineOnly || skipDefaultResolvers()) | |||||
.resolvers(resolvers != null && !baselineOnly ? resolvers : new MigrationResolver[0]) | |||||
.baselineOnMigrate(baseline) | .baselineOnMigrate(baseline) | ||||
.baselineVersion(baselineVersion)); | .baselineVersion(baselineVersion)); | ||||
@@ -66,9 +66,9 @@ public class SystemInitializerListener extends RestServerLifecycleListenerBase { | |||||
if (checkTable) { | if (checkTable) { | ||||
ok = checkTable(config); | ok = checkTable(config); | ||||
if (!ok) { | if (!ok) { | ||||
// create the schema when the test table does not exist. Disable migration | |||||
// create the schema when the test table does not exist. Do baseline migration | |||||
config.getDatabase().getHibernate().setHbm2ddlAuto("create"); | config.getDatabase().getHibernate().setHbm2ddlAuto("create"); | ||||
config.getDatabase().setMigrationEnabled(false); | |||||
config.getDatabase().setMigrationBaselineOnly(true); | |||||
} | } | ||||
} else { | } else { | ||||
config.execSql("select 1"); | config.execSql("select 1"); | ||||
@@ -87,9 +87,9 @@ public class SystemInitializerListener extends RestServerLifecycleListenerBase { | |||||
execScript("createdb --encoding=UTF-8 "+db); | execScript("createdb --encoding=UTF-8 "+db); | ||||
if (!dbExists(db)) die(PREFIX+"error creating "+db+" database"); | if (!dbExists(db)) die(PREFIX+"error creating "+db+" database"); | ||||
// create the schema, just this time. Disable migration. | |||||
// create the schema, just this time. Do baseline migration. | |||||
config.getDatabase().getHibernate().setHbm2ddlAuto("create"); | config.getDatabase().getHibernate().setHbm2ddlAuto("create"); | ||||
config.getDatabase().setMigrationEnabled(false); | |||||
config.getDatabase().setMigrationBaselineOnly(true); | |||||
} else { | } else { | ||||
log.info(db+" DB exists, not creating"); | log.info(db+" DB exists, not creating"); | ||||
@@ -125,9 +125,9 @@ public class SystemInitializerListener extends RestServerLifecycleListenerBase { | |||||
try { | try { | ||||
return runTableCheck(config, tableName); | return runTableCheck(config, tableName); | ||||
} catch (Exception e) { | } catch (Exception e) { | ||||
log.warn("table '"+tableName+"' not found, will create schema (disabling migration): " + shortError(e)); | |||||
log.warn("table '"+tableName+"' not found, will create schema and do baseline migration: " + shortError(e)); | |||||
config.getDatabase().getHibernate().setHbm2ddlAuto("create"); | config.getDatabase().getHibernate().setHbm2ddlAuto("create"); | ||||
config.getDatabase().setMigrationEnabled(false); | |||||
config.getDatabase().setMigrationBaselineOnly(true); | |||||
} | } | ||||
} | } | ||||
return false; | return false; | ||||