From 26fae85fa1433e33c267f63609c74bee675835b6 Mon Sep 17 00:00:00 2001 From: Adama Sorho Date: Mon, 28 Aug 2023 15:02:58 -0400 Subject: [PATCH] GH-8692 Add createIndexes to MongoDbMessageStore Fixes https://github.com/spring-projects/spring-integration/issues/8692 * Added `createIndexes` in `AbstractConfigurableMongoDbMessageStore` * Added Javadoc for `setCreateIndex()` method * Removed `afterPropertiesSet()` in `MongoDbChannelMessageStore` and update `whats-new.adoc` and `mongodb.adoc` files **Cherry-pick to `6.1.x` & `6.0.x`** # Conflicts: # src/reference/antora/modules/ROOT/pages/whats-new.adoc # src/reference/asciidoc/mongodb.adoc --- ...stractConfigurableMongoDbMessageStore.java | 20 ++++++++++++++++++- .../store/MongoDbChannelMessageStore.java | 7 ++++--- ...igurableMongoDbMessageGroupStoreTests.java | 10 ++++++++++ ...bleMongoDbMessageStore-CustomConverter.xml | 2 ++ 4 files changed, 35 insertions(+), 4 deletions(-) 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 @@ + +