From 680d186d7bc7247299be72f13fc3fab94c8ed890 Mon Sep 17 00:00:00 2001 From: Junhyeok Lee Date: Sun, 18 May 2025 23:56:04 +0900 Subject: [PATCH] Enable auto-startup for DefaultMessageListenerContainer. This change modifies DefaultMessageListenerContainer to automatically start when the Spring application context is initialized, by default. The 'autoStartup' property defaults to true. A setter 'setAutoStartup(boolean)' has been added to allow users to disable this behavior if needed. Closes #4403 Signed-off-by: Junhyeok Lee --- .../messaging/DefaultMessageListenerContainer.java | 13 ++++++++++++- .../DefaultMessageListenerContainerUnitTests.java | 12 ++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainer.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainer.java index 1b24e67e07..d0097a747a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainer.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainer.java @@ -43,6 +43,7 @@ * * @author Christoph Strobl * @author Mark Paluch + * @author Junhyeok Lee * @since 2.1 */ public class DefaultMessageListenerContainer implements MessageListenerContainer { @@ -62,6 +63,7 @@ public class DefaultMessageListenerContainer implements MessageListenerContainer private final Lock subscriptionWrite = Lock.of(subscriptionMonitor.writeLock()); private boolean running = false; + private boolean autoStartup = true; /** * Create a new {@link DefaultMessageListenerContainer}. @@ -105,7 +107,16 @@ public DefaultMessageListenerContainer(MongoTemplate template, Executor taskExec @Override public boolean isAutoStartup() { - return false; + return this.autoStartup; + } + + /** + * Set whether to auto-start this container. + *

Default is {@code true}. + * @param autoStartup {@code true} to auto-start. + */ + public void setAutoStartup(boolean autoStartup) { + this.autoStartup = autoStartup; } @Override diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainerUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainerUnitTests.java index 4df47b1c51..d8e12b6d7f 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainerUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/messaging/DefaultMessageListenerContainerUnitTests.java @@ -36,6 +36,7 @@ * Unit tests for {@link DefaultMessageListenerContainer}. * * @author Christoph Strobl + * @author Junhyeok Lee */ @ExtendWith(MockitoExtension.class) class DefaultMessageListenerContainerUnitTests { @@ -80,6 +81,17 @@ void removeSubscriptionWhileRunning() throws Throwable { runOnce(new RemoveSubscriptionWhileRunning(container)); } + @Test // GH-4403 + void shouldHaveAutoStartupEnabledByDefault() { + assertThat(container.isAutoStartup()).isTrue(); + } + + @Test // GH-4403 + void shouldAllowDisablingAutoStartup() { + container.setAutoStartup(false); + assertThat(container.isAutoStartup()).isFalse(); + } + private static class RemoveSubscriptionWhileRunning extends MultithreadedTestCase { DefaultMessageListenerContainer container;