com.github.joschi.dropwizard.flyway.AbstractFlywayCommand Maven / Gradle / Ivy
package com.github.joschi.dropwizard.flyway;
import io.dropwizard.Configuration;
import io.dropwizard.cli.ConfiguredCommand;
import io.dropwizard.db.DataSourceFactory;
import io.dropwizard.db.DatabaseConfiguration;
import io.dropwizard.setup.Bootstrap;
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 Class configurationClass;
AbstractFlywayCommand(final String name,
final String description,
final DatabaseConfiguration databaseConfiguration,
final Class configurationClass) {
super(name, description);
this.databaseConfiguration = databaseConfiguration;
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 DataSourceFactory factory = databaseConfiguration.getDataSourceFactory(configuration);
final Flyway flyway = new Flyway();
flyway.setDataSource(factory.build(bootstrap.getMetricRegistry(), "Flyway"));
try {
run(namespace, flyway);
} catch (FlywayException e) {
LOG.error("Error while running database command", e);
throw e;
}
}
protected abstract void run(final Namespace namespace, final Flyway flyway) throws Exception;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy