From 431fc7f886291904bba6f9a9bec6925bf5bd2bc0 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 Original pull request: #4976 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 1b24e67e0..d0097a747 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 @@ import org.springframework.util.ObjectUtils; * * @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 class DefaultMessageListenerContainer implements MessageListenerContainer @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 4df47b1c5..d8e12b6d7 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 @@ import org.springframework.util.ErrorHandler; * Unit tests for {@link DefaultMessageListenerContainer}. * * @author Christoph Strobl + * @author Junhyeok Lee */ @ExtendWith(MockitoExtension.class) class DefaultMessageListenerContainerUnitTests { @@ -80,6 +81,17 @@ class DefaultMessageListenerContainerUnitTests { 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;