package io.dataease.flyway;
|
|
import org.flywaydb.core.Flyway;
|
import org.flywaydb.core.api.configuration.ClassicConfiguration;
|
import org.flywaydb.core.api.configuration.Configuration;
|
|
import javax.sql.DataSource;
|
import java.nio.charset.Charset;
|
|
public class TenantFlywayUtil {
|
|
private static final String FLYWAY_MANAGE_TABLE_NAME = "de_manage_version";
|
|
private static final String FLYWAY_TABLENAME_FORMAT = "de_tenant_%s_version";
|
private static final String FLYWAY_LOCATION = "classpath:db/migration";
|
private static final String FLYWAY_MANAGE_LOCATION = "classpath:db/distributed/manage";
|
|
|
private static Configuration buildConfiguration(DataSource dataSource, boolean isManager, String appName) {
|
ClassicConfiguration configuration = new ClassicConfiguration();
|
configuration.setValidateOnMigrate(true);
|
configuration.setBaselineOnMigrate(true);
|
configuration.setTable(isManager ? FLYWAY_MANAGE_TABLE_NAME : getVersionTableName(appName));
|
configuration.setEncoding(Charset.forName("utf-8"));
|
configuration.setOutOfOrder(true);
|
configuration.setBaselineVersionAsString("1");
|
configuration.setLocationsAsStrings(isManager ? FLYWAY_MANAGE_LOCATION : FLYWAY_LOCATION);
|
configuration.setDataSource(dataSource);
|
return configuration;
|
}
|
|
public static void executeFlyway(DataSource dataSource, boolean isManage, String appName) throws Exception {
|
Configuration configuration = buildConfiguration(dataSource, isManage, appName);
|
Flyway flyway = new Flyway(configuration);
|
flyway.migrate();
|
}
|
|
private static String getVersionTableName(String appName) {
|
return String.format(FLYWAY_TABLENAME_FORMAT, appName);
|
}
|
|
}
|