This is an automated email from the git hooks/post-receive script. New commit to branch feature/666_flyway_6 in repository topia. See https://gitlab.nuiton.org/nuiton/topia.git commit 3e1bde148408688a7ee2acbaf2f5f46558f78fcf Author: Brendan Le Ny <bleny@codelutin.com> Date: Thu Aug 29 16:33:06 2019 +0200 Use flyway 6 --- pom.xml | 2 +- .../topia/flyway/TopiaFlywayJdbcMigration.java | 36 ------------- .../flyway/TopiaFlywayMigrationInfoProvider.java | 36 ------------- .../topia/flyway/TopiaFlywayServiceImpl.java | 63 ++++++++++++++-------- 4 files changed, 42 insertions(+), 95 deletions(-) diff --git a/pom.xml b/pom.xml index d3c95774..2c67088f 100644 --- a/pom.xml +++ b/pom.xml @@ -220,7 +220,7 @@ <!-- libs version --> <commonsLoggingVersion>1.2</commonsLoggingVersion> <eugeneVersion>3.0-alpha-10</eugeneVersion> - <flywayVersion>5.0.0</flywayVersion> + <flywayVersion>6.0.1</flywayVersion> <guavaVersion>27.0.1-jre</guavaVersion> <h2Version>1.4.196</h2Version> diff --git a/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayJdbcMigration.java b/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayJdbcMigration.java deleted file mode 100644 index 9ebc51bc..00000000 --- a/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayJdbcMigration.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.nuiton.topia.flyway; - -/* - * #%L - * ToPIA :: Flyway integration service - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import org.flywaydb.core.api.migration.jdbc.JdbcMigration; - -/** - * Just an interface renaming so you don't need to add flyway as dependency and risk a version conflict. - * - * @since 3.0 - */ -public interface TopiaFlywayJdbcMigration extends JdbcMigration { - -} diff --git a/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayMigrationInfoProvider.java b/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayMigrationInfoProvider.java deleted file mode 100644 index 7caa333f..00000000 --- a/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayMigrationInfoProvider.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.nuiton.topia.flyway; - -/* - * #%L - * ToPIA :: Flyway integration service - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2004 - 2014 CodeLutin - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program 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 Lesser Public License for more details. - * - * You should have received a copy of the GNU General Lesser Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/lgpl-3.0.html>. - * #L% - */ - -import org.flywaydb.core.api.migration.MigrationInfoProvider; - -/** - * Just an interface renaming so you don't need to add flyway as dependency and risk a version conflict. - * - * @since 3.0 - */ -public interface TopiaFlywayMigrationInfoProvider extends MigrationInfoProvider { - -} diff --git a/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayServiceImpl.java b/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayServiceImpl.java index dab436eb..3580cae1 100644 --- a/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayServiceImpl.java +++ b/topia-service-flyway/src/main/java/org/nuiton/topia/flyway/TopiaFlywayServiceImpl.java @@ -31,12 +31,15 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.flywaydb.core.Flyway; +import org.flywaydb.core.api.Location; import org.flywaydb.core.api.MigrationInfo; import org.flywaydb.core.api.MigrationVersion; -import org.flywaydb.core.internal.util.Location; +import org.flywaydb.core.api.configuration.ClassicConfiguration; +import org.flywaydb.core.api.configuration.Configuration; import org.nuiton.topia.persistence.TopiaApplicationContext; import org.nuiton.topia.persistence.TopiaException; import org.nuiton.topia.persistence.TopiaMigrationServiceException; @@ -71,7 +74,7 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { */ protected boolean useModelVersion = true; - protected Flyway flyway; + protected Configuration flywayConfiguration; protected String modelVersion; @@ -104,18 +107,20 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { useModelVersion = Boolean.valueOf(useModelVersionString); } + flywayConfiguration = newFlywayConfiguration(topiaApplicationContext); + if (log.isInfoEnabled()) { - log.info("init flyway service"); + log.info("flyway configuration " + toString(flywayConfiguration)); } - flyway = new Flyway(); - - setDataSource(flyway, topiaApplicationContext); - - setLocations(flyway, topiaApplicationContext); - - doExtraConfiguration(flyway, topiaApplicationContext); + } + protected ClassicConfiguration newFlywayConfiguration(TopiaApplicationContext topiaApplicationContext) { + ClassicConfiguration newFlywayConfiguration = new ClassicConfiguration(); + setDataSource(newFlywayConfiguration, topiaApplicationContext); + setLocations(newFlywayConfiguration, topiaApplicationContext); + doExtraConfiguration(newFlywayConfiguration, topiaApplicationContext); + return newFlywayConfiguration; } /** @@ -125,7 +130,7 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { * {@link org.nuiton.topia.persistence.TopiaApplicationContext#getConfiguration()}. We use * the same credentials to migrate the database as the one used when we use it. */ - protected void setDataSource(Flyway flyway, TopiaApplicationContext topiaApplicationContext) { + protected void setDataSource(ClassicConfiguration flywayConfiguration, TopiaApplicationContext topiaApplicationContext) { JdbcConfiguration configuration = topiaApplicationContext.getConfiguration(); @@ -133,7 +138,7 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { String user = configuration.getJdbcConnectionUser(); String password = configuration.getJdbcConnectionPassword(); - flyway.setDataSource(url, user, password); + flywayConfiguration.setDataSource(url, user, password); } @@ -143,7 +148,7 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { * This implementation search for *.sql migration files in "db/migration" resources directory * and for JDBC migrations in package.to.ApplicationContext<strong>.migration</strong> package. */ - protected void setLocations(Flyway flyway, TopiaApplicationContext topiaApplicationContext) { + protected void setLocations(ClassicConfiguration flywayConfiguration, TopiaApplicationContext topiaApplicationContext) { String classpathMigrationPackage = topiaApplicationContext.getClass().getPackage().getName() + ".migration"; ImmutableSet<String> defaultLocations = ImmutableSet.of("db/migration", classpathMigrationPackage); @@ -173,19 +178,21 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { } String[] locationsArray = locations.toArray(new String[locations.size()]); - flyway.setLocations(locationsArray); + flywayConfiguration.setLocationsAsStrings(locationsArray); } /** * Opened hook to override in a sub-class. */ - protected void doExtraConfiguration(Flyway flyway, TopiaApplicationContext topiaApplicationContext) { + protected void doExtraConfiguration(ClassicConfiguration flywayConfiguration, TopiaApplicationContext topiaApplicationContext) { } @Override public String getSchemaVersion() throws TopiaMigrationServiceException { + Flyway flyway = new Flyway(flywayConfiguration); + MigrationInfo currentOrNull = flyway.info().current(); if (currentOrNull == null) { @@ -216,6 +223,7 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { } else { // Do not use model version. That means we have to "guess" which is minimal the model version from the available migration scripts + Flyway flyway = new Flyway(flywayConfiguration); MigrationInfo[] allMigrations = flyway.info().all(); if (ArrayUtils.isEmpty(allMigrations)) { @@ -250,19 +258,28 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { } + ClassicConfiguration flywayConfigurationForInitOnCreateSchema = new ClassicConfiguration(flywayConfiguration); + flywayConfigurationForInitOnCreateSchema.setBaselineVersion(MigrationVersion.fromVersion(baselineVersion)); + flywayConfigurationForInitOnCreateSchema.setBaselineDescription("schema creation called on application context by topia flyway service"); + if (log.isInfoEnabled()) { - log.info("baseline flyway to version " + baselineVersion); + log.info("baseline flyway to version " + baselineVersion + " with flyway configuration " + toString(flywayConfigurationForInitOnCreateSchema)); } - flyway.setBaselineVersion(MigrationVersion.fromVersion(baselineVersion)); - flyway.setBaselineDescription("schema creation called on application context by topia flyway service"); + Flyway flyway = new Flyway(flywayConfigurationForInitOnCreateSchema); flyway.baseline(); } + private String toString(Configuration flywayConfiguration) { + return ReflectionToStringBuilder.reflectionToString(flywayConfiguration); + } + @Override public void runSchemaMigration() { + ClassicConfiguration flywayConfigurationForMigration = new ClassicConfiguration(flywayConfiguration); + if (flywayBaselineVersion == null) { if (log.isDebugEnabled()) { log.debug("schema exists, no flywayInitVersion found, let suppose flyway is already initialized"); @@ -279,8 +296,8 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { if (log.isDebugEnabled()) { log.debug("schema exists, will ask flyway to init if necessary to version " + flywayBaselineVersion); } - flyway.setBaselineOnMigrate(true); - flyway.setBaselineVersion(MigrationVersion.fromVersion(flywayBaselineVersion)); + flywayConfigurationForMigration.setBaselineOnMigrate(true); + flywayConfigurationForMigration.setBaselineVersion(MigrationVersion.fromVersion(flywayBaselineVersion)); } if (useModelVersion) { @@ -290,7 +307,7 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { log.info("schema exists, will run flyway migration up to target version " + targetVersion); } - flyway.setTarget(MigrationVersion.fromVersion(targetVersion)); + flywayConfigurationForMigration.setTarget(MigrationVersion.fromVersion(targetVersion)); } else { if (log.isInfoEnabled()) { @@ -300,9 +317,11 @@ public class TopiaFlywayServiceImpl implements TopiaFlywayService { } if (log.isInfoEnabled()) { - log.info("run flyway migration"); + log.info("run flyway migration with configuration " + toString(flywayConfigurationForMigration)); } + Flyway flyway = new Flyway(flywayConfigurationForMigration); + flyway.migrate(); } -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.