
io.dropwizard.flyway.cli.AbstractFlywayCommand Maven / Gradle / Ivy
package io.dropwizard.flyway.cli;
import io.dropwizard.core.Configuration;
import io.dropwizard.core.cli.ConfiguredCommand;
import io.dropwizard.core.setup.Bootstrap;
import io.dropwizard.db.DatabaseConfiguration;
import io.dropwizard.db.PooledDataSourceFactory;
import io.dropwizard.flyway.FlywayConfiguration;
import io.dropwizard.flyway.FlywayFactory;
import net.sourceforge.argparse4j.inf.Namespace;
import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.FlywayException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
abstract class AbstractFlywayCommand extends ConfiguredCommand {
private static final Logger LOG = LoggerFactory.getLogger(AbstractFlywayCommand.class);
private final DatabaseConfiguration databaseConfiguration;
private final FlywayConfiguration flywayConfiguration;
private final Class configurationClass;
AbstractFlywayCommand(final String name,
final String description,
final DatabaseConfiguration databaseConfiguration,
final FlywayConfiguration flywayConfiguration,
final Class configurationClass) {
super(name, description);
this.databaseConfiguration = databaseConfiguration;
this.flywayConfiguration = flywayConfiguration;
this.configurationClass = configurationClass;
}
@Override
protected Class getConfigurationClass() {
return configurationClass;
}
@Override
protected void run(final Bootstrap bootstrap, final Namespace namespace, final T configuration) throws Exception {
final PooledDataSourceFactory datasourceFactory = databaseConfiguration.getDataSourceFactory(configuration);
final FlywayFactory flywayFactory = flywayConfiguration.getFlywayFactory(configuration);
// Give subclasses an option to set additional config flags for flyway.
setAdditionalOptions(flywayFactory, namespace);
final Flyway flyway = flywayFactory.build(datasourceFactory.build(bootstrap.getMetricRegistry(), "Flyway"));
try {
run(namespace, flyway);
} catch (FlywayException e) {
LOG.error("Error while running database command", e);
throw e;
}
}
protected abstract void setAdditionalOptions(FlywayFactory flywayFactory, Namespace namespace);
protected abstract void run(final Namespace namespace, final Flyway flyway) throws Exception;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy