io.lavagna.service.DatabaseMigrator.java Source code

Java tutorial

Introduction

Here is the source code for io.lavagna.service.DatabaseMigrator.java

Source

/**
 * This file is part of lavagna.
 *
 * lavagna is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * lavagna is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with lavagna.  If not, see <http://www.gnu.org/licenses/>.
 */
package io.lavagna.service;

import javax.sql.DataSource;

import org.flywaydb.core.Flyway;
import org.flywaydb.core.api.MigrationVersion;
import org.springframework.core.env.Environment;

public class DatabaseMigrator {

    public DatabaseMigrator(Environment env, DataSource dataSource, MigrationVersion target) {
        if (canMigrate(env)) {
            doMigration(env, dataSource, target);
        }
    }

    private void doMigration(Environment env, DataSource dataSource, MigrationVersion version) {
        String sqlDialect = env.getRequiredProperty("datasource.dialect");
        Flyway migration = new Flyway();
        migration.setDataSource(dataSource);
        // FIXME remove the validation = false when the schemas will be stable
        migration.setValidateOnMigrate(false);
        //

        migration.setTarget(version);

        migration.setLocations("io/lavagna/db/" + sqlDialect + "/");
        migration.migrate();
    }

    private boolean canMigrate(Environment env) {
        return !"true".equals(env.getProperty("datasource.disable.migration"));
    }
}