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

cn.dreampie.AbstractFlywayMojo Maven / Gradle / Ivy

There is a newer version: 1.1
Show newest version
package cn.dreampie;

/*
 * Copyright 2001-2005 The Apache Software Foundation.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import com.google.common.collect.Maps;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.plugins.annotations.Parameter;
import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.MigrationInfo;
import org.flywaydb.core.internal.info.MigrationInfoDumper;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * Goal which touches a timestamp file.
 */
public abstract class AbstractFlywayMojo extends AbstractMojo {

  private Log log = getLog();

  @Parameter(defaultValue = "${project.build.directory}/src/main/resources/application.properties", required = true)
  private String config;

  @Parameter(defaultValue = "filesystem:${project.build.directory}/db/migration/", required = true)
  private String location;

  @Parameter(defaultValue = "false")
  private boolean skip;

  private DbConfig dbConfig;

  public void info() {
    dbConfig = new DbConfig(config);
    Map flywayMap = flyways();
    for (Flyway flyway : flywayMap.values()) {
      log.info("\n" + MigrationInfoDumper.dumpToAsciiTable(flyway.info().all()));
    }
  }

  public void init() {
    dbConfig = new DbConfig(config);
    log.info("flyway init begin!");
    Map flywayMap = flyways();
    for (Flyway flyway : flywayMap.values()) {
      flyway.init();
    }
    log.info("flyway init end!");
  }

  public void repair() {
    dbConfig = new DbConfig(config);
    log.info("flyway repair begin!");
    Map flywayMap = flyways();
    for (Flyway flyway : flywayMap.values()) {
      flyway.repair();
    }
    log.info("flyway repair end!");
  }

  public void validate() {
    dbConfig = new DbConfig(config);
    log.info("flyway validate begin!");
    Map flywayMap = flyways();
    for (Flyway flyway : flywayMap.values()) {
      flyway.validate();
    }
    log.info("flyway validate end!");
  }


  public void migrate() {
    dbConfig = new DbConfig(config);
    log.info("flyway migrate begin!");
    List dbNames = dbConfig.getAllDbNames();
    boolean dev = dbConfig.isDev();
    for (String dbName : dbNames) {
      boolean auto = dbConfig.migrateAuto(dbName);
      if (dev || auto) {
        migrateAutomatically(dbName);
      } else {
        checkState(dbName);
      }
    }
    log.info("flyway migrate end!");
  }

  public void clean() {
    dbConfig = new DbConfig(config);
    log.info("flyway clean begin!");
    Map flywayMap = flyways();
    for (Flyway flyway : flywayMap.values()) {
      flyway.clean();
    }
    log.info("flyway clean end!");
  }

  private Map flyways() {
    Map flywayMap = Maps.newHashMap();
    Map dbSourceMap = dbConfig.getAllDbSources();
    DbSource dbSource = null;
    String migrationFilesLocation = null;
    Flyway flyway = null;
    for (String dbName : dbSourceMap.keySet()) {
      migrationFilesLocation = location + dbName;
      log.info("location:" + migrationFilesLocation);
      dbSource = dbSourceMap.get(dbName);
      flyway = new Flyway();
      flyway.setDataSource(dbSource.url, dbSource.user, dbSource.password);
      flyway.setLocations(migrationFilesLocation);
      if (dbConfig.isClean(dbName)) {
        flyway.setCleanOnValidationError(true);
      }
      if (dbConfig.initOnMigrate(dbName)) {
        flyway.setInitOnMigrate(true);
      }
      flywayMap.put(dbName, flyway);
    }
    return flywayMap;
  }

  private void migrateAutomatically(String dbName) {
    Map flywayMap = flyways();
    flywayMap.get(dbName).migrate();
  }

  private void cleanAutomatically(String dbName) {
    Map flywayMap = flyways();
    flywayMap.get(dbName).clean();
  }

  private void checkState(String dbName) {
    Map flywayMap = flyways();

    MigrationInfo[] pendingMigrations = flywayMap.get(dbName).info().pending();

    if (pendingMigrations != null) {
      throw new RuntimeException(dbName + "-" + Arrays.toString(pendingMigrations));
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy