All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.jooby.flyway.FlywayModule Maven / Gradle / Ivy

There is a newer version: 3.3.1
Show newest version
/*
 * Jooby https://jooby.io
 * Apache License Version 2.0 https://jooby.io/LICENSE.txt
 * Copyright 2014 Edgar Espina
 */
package io.jooby.flyway;

import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import javax.sql.DataSource;

import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.configuration.FluentConfiguration;

import edu.umd.cs.findbugs.annotations.NonNull;
import io.jooby.Environment;
import io.jooby.Extension;
import io.jooby.Jooby;
import io.jooby.ServiceKey;
import io.jooby.ServiceRegistry;

/**
 * Flyway database migration module: https://jooby.io/modules/flyway.
 *
 * 

Usage: * *

- Add hikari and flyway dependency * *

- Install them * *

{@code
 * {
 *   install(new HikariModule());
 *
 *   install(new FlywayModule());
 * }
 * }
* * The default command is migrate which is controlled by the flyway.run * application configuration property. * *

You can specify multiple commands: flyway.run = [clean, migrate] Complete * documentation is available at: https://jooby.io/modules/flyway. * * @author edgar * @since 2.0.0 */ public class FlywayModule implements Extension { private final String name; /** * Creates a new Flyway module. * * @param name The name/key of the data source to attach. */ public FlywayModule(@NonNull String name) { this.name = name; } /** * Creates a new Flyway module. Use the default/first datasource and register objects using the * db key. */ public FlywayModule() { this("db"); } @Override public void install(@NonNull Jooby application) throws Exception { Environment environment = application.getEnvironment(); ServiceRegistry registry = application.getServices(); DataSource dataSource = registry.getOrNull(ServiceKey.key(DataSource.class, name)); if (dataSource == null) { // TODO: replace with usage exception dataSource = registry.require(DataSource.class); } FluentConfiguration configuration = new FluentConfiguration(environment.getClassLoader()); Map defaults = environment.getProperties("flyway"); Map overrides = environment.getProperties(name + ".flyway", "flyway"); Map properties = new HashMap<>(); properties.putAll(defaults); properties.putAll(overrides); String[] commandString = Optional.ofNullable(properties.remove("flyway.run")).orElse("migrate").split("\\s*,\\s*"); configuration.configuration(properties); configuration.dataSource(dataSource); Flyway flyway = new Flyway(configuration); for (String command : commandString) { runCommand(command.toLowerCase(), flyway); } registry.putIfAbsent(Flyway.class, flyway); registry.put(ServiceKey.key(Flyway.class, name), flyway); } private void runCommand(String command, Flyway flyway) { switch (command) { case "migrate": flyway.migrate(); break; case "clean": flyway.clean(); break; case "info": flyway.info(); break; case "validate": flyway.validate(); break; case "undo": flyway.undo(); break; case "baseline": flyway.baseline(); case "repair": flyway.repair(); default: throw new IllegalArgumentException("Unknown flyway command: " + command); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy