diff --git a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/AbstractConfigurableMongoDbMessageStore.java b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/AbstractConfigurableMongoDbMessageStore.java index fc2870897a..518fb85f2d 100644 --- a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/AbstractConfigurableMongoDbMessageStore.java +++ b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/AbstractConfigurableMongoDbMessageStore.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2022 the original author or authors. + * Copyright 2014-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,6 +60,7 @@ import org.springframework.util.Assert; * for implementations of this class. * * @author Artem Bilan + * @author Adama Sorho * * @since 4.0 */ @@ -86,6 +87,8 @@ public abstract class AbstractConfigurableMongoDbMessageStore extends AbstractMe private MessageBuilderFactory messageBuilderFactory = new DefaultMessageBuilderFactory(); + private boolean createIndexes = true; + public AbstractConfigurableMongoDbMessageStore(MongoTemplate mongoTemplate, String collectionName) { Assert.notNull(mongoTemplate, "'mongoTemplate' must not be null"); Assert.hasText(collectionName, "'collectionName' must not be empty"); @@ -107,6 +110,15 @@ public abstract class AbstractConfigurableMongoDbMessageStore extends AbstractMe this.mappingMongoConverter = mappingMongoConverter; } + /** + * Define the option to auto create indexes or not. + * @param createIndexes a boolean. + * @since 6.0.8. + */ + public void setCreateIndexes(boolean createIndexes) { + this.createIndexes = createIndexes; + } + @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; @@ -146,6 +158,12 @@ public abstract class AbstractConfigurableMongoDbMessageStore extends AbstractMe this.messageBuilderFactory = IntegrationUtils.getMessageBuilderFactory(this.applicationContext); + if (this.createIndexes) { + createIndexes(); + } + } + + protected void createIndexes() { IndexOperations indexOperations = this.mongoTemplate.indexOps(this.collectionName); indexOperations.ensureIndex(new Index(MessageDocumentFields.MESSAGE_ID, Sort.Direction.ASC)); diff --git a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbChannelMessageStore.java b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbChannelMessageStore.java index 4e90dcf733..76ee7da77a 100644 --- a/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbChannelMessageStore.java +++ b/spring-integration-mongodb/src/main/java/org/springframework/integration/mongodb/store/MongoDbChannelMessageStore.java @@ -1,5 +1,5 @@ /* - * Copyright 2014-2020 the original author or authors. + * Copyright 2014-2023 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -43,6 +43,7 @@ import org.springframework.util.Assert; * {@code priorityEnabled = true} option. * * @author Artem Bilan + * @author Adama Sorho * * @since 4.0 */ @@ -94,8 +95,8 @@ public class MongoDbChannelMessageStore extends AbstractConfigurableMongoDbMessa } @Override - public void afterPropertiesSet() { - super.afterPropertiesSet(); + protected void createIndexes() { + super.createIndexes(); getMongoTemplate() .indexOps(this.collectionName) .ensureIndex(new Index(MessageDocumentFields.GROUP_ID, Sort.Direction.ASC) diff --git a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageGroupStoreTests.java b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageGroupStoreTests.java index d4c74e4707..4519f8ecde 100644 --- a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageGroupStoreTests.java +++ b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageGroupStoreTests.java @@ -16,6 +16,7 @@ package org.springframework.integration.mongodb.store; +import java.util.List; import java.util.Map; import org.bson.Document; @@ -25,6 +26,8 @@ import org.junit.jupiter.api.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.ReadingConverter; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.index.IndexInfo; import org.springframework.integration.IntegrationMessageHeaderAccessor; import org.springframework.integration.channel.PriorityChannel; import org.springframework.integration.channel.QueueChannel; @@ -42,6 +45,7 @@ import static org.assertj.core.api.Assertions.assertThat; * @author Amol Nayak * @author Artem Bilan * @author Artem Vozhdayenko + * @author Adama Sorho * */ class ConfigurableMongoDbMessageGroupStoreTests extends AbstractMongoDbMessageGroupStoreTests { @@ -134,6 +138,12 @@ class ConfigurableMongoDbMessageGroupStoreTests extends AbstractMongoDbMessageGr .getClass()); context.refresh(); + List indexesInfo = + new MongoTemplate(MONGO_DATABASE_FACTORY) + .indexOps("customConverterCollection") + .getIndexInfo(); + assertThat(indexesInfo).hasSize(0); + TestGateway gateway = context.getBean(TestGateway.class); String result = gateway.service("foo"); assertThat(result).isEqualTo("FOO"); diff --git a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore-CustomConverter.xml b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore-CustomConverter.xml index 8f83be8288..ea96a3eacc 100644 --- a/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore-CustomConverter.xml +++ b/spring-integration-mongodb/src/test/java/org/springframework/integration/mongodb/store/ConfigurableMongoDbMessageStore-CustomConverter.xml @@ -29,6 +29,8 @@ + +