diff --git a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java index dd1b1e21e55a56bab60d90f2f18f49f6cb8b441e..13d31dc60d9450547019904e4e337ed2c1dc3977 100644 --- a/src/main/java/de/thm/arsnova/config/PersistanceConfig.java +++ b/src/main/java/de/thm/arsnova/config/PersistanceConfig.java @@ -34,6 +34,9 @@ public class PersistanceConfig { @Bean public MangoCouchDbConnector couchDbMigrationConnector() throws Exception { + if (couchDbMigrateFrom.isEmpty()) { + return null; + } return new MangoCouchDbConnector(couchDbMigrateFrom, couchDbInstance(), couchDbObjectMapperFactory()); } diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java new file mode 100644 index 0000000000000000000000000000000000000000..0c2d1c68149cfc2ff077703329949db07011bf3f --- /dev/null +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrateFromLegacyCondition.java @@ -0,0 +1,15 @@ +package de.thm.arsnova.persistance.couchdb.migrations; + +import org.springframework.context.annotation.Condition; +import org.springframework.context.annotation.ConditionContext; +import org.springframework.core.type.AnnotatedTypeMetadata; +import org.springframework.stereotype.Component; + +@Component +public class MigrateFromLegacyCondition implements Condition { + @Override + public boolean matches(final ConditionContext context, final AnnotatedTypeMetadata metadata) { + final String migrateFrom = context.getEnvironment().getProperty("couchdb.migrate-from"); + return migrateFrom != null && !migrateFrom.isEmpty(); + } +} diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java index 9d32a201860a91db3e0b0f6bee42ad08ba419a41..68554e69cce5cedeba60c56ca8a3d012b90142c1 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/MigrationExecutor.java @@ -23,9 +23,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -37,11 +39,12 @@ import java.util.stream.Collectors; public class MigrationExecutor { private static final Logger logger = LoggerFactory.getLogger(MigrationExecutor.class); - private List<Migration> migrations; + private List<Migration> migrations = Collections.EMPTY_LIST; - public MigrationExecutor(List<Migration> migrations) { - this.migrations = migrations.stream() - .sorted(Comparator.comparing(Migration::getId)).collect(Collectors.toList()); + public MigrationExecutor(final Optional<List<Migration>> migrations) { + migrations.map(m -> this.migrations = m.stream() + .sorted(Comparator.comparing(Migration::getId)).collect(Collectors.toList())); + logger.debug("Initialized {} migration(s).", this.migrations.size()); } public boolean runMigrations(@NonNull final MigrationState migrationState) { diff --git a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java index 60647e2edc37ad31d1cf6eda81821fb86de9825d..c55c34720432f22aaf7cab37ccc1e62125223076 100644 --- a/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java +++ b/src/main/java/de/thm/arsnova/persistance/couchdb/migrations/V2ToV3Migration.java @@ -29,6 +29,7 @@ import de.thm.arsnova.persistance.UserRepository; import de.thm.arsnova.persistance.couchdb.support.MangoCouchDbConnector; import org.ektorp.DocumentNotFoundException; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.context.annotation.Conditional; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -44,6 +45,7 @@ import java.util.Set; * * @author Daniel Gerhardt */ +@Conditional(MigrateFromLegacyCondition.class) @Service public class V2ToV3Migration implements Migration { private static final String ID = "20170914131300";