diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandler.java index d7955dd4ed..24cf98c318 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandler.java @@ -276,7 +276,8 @@ public class SimpAnnotationMethodMessageHandler extends AbstractMethodMessageHan /** * Set the phase that this handler should run in. - *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}. + *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}, but with + * {@code @EnableWebSocketMessageBroker} configuration it is set to 0. * @since 6.1.4 */ public void setPhase(int phase) { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java index e71eb4ad29..4107ad4e35 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/AbstractBrokerMessageHandler.java @@ -202,7 +202,8 @@ public abstract class AbstractBrokerMessageHandler /** * Set the phase that this handler should run in. - *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}. + *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}, but with + * {@code @EnableWebSocketMessageBroker} configuration it is set to 0. * @since 6.1.4 */ public void setPhase(int phase) { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java index 7439c8c830..2a9747f536 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java @@ -28,7 +28,6 @@ import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; -import org.springframework.context.SmartLifecycle; import org.springframework.context.annotation.Bean; import org.springframework.context.event.SmartApplicationListener; import org.springframework.lang.Nullable; @@ -197,7 +196,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC } protected int initPhase() { - return SmartLifecycle.DEFAULT_PHASE; + return 0; } /** diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserDestinationMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserDestinationMessageHandler.java index 20cd5e5e47..9c8d24faab 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserDestinationMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/user/UserDestinationMessageHandler.java @@ -159,7 +159,8 @@ public class UserDestinationMessageHandler implements MessageHandler, SmartLifec /** * Set the phase that this handler should run in. - *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}. + *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}, but with + * {@code @EnableWebSocketMessageBroker} configuration it is set to 0. * @since 6.1.4 */ public void setPhase(int phase) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurer.java b/spring-websocket/src/main/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurer.java index f1c047220a..2240c1eb47 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurer.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurer.java @@ -117,11 +117,9 @@ public interface WebSocketMessageBrokerConfigurer { * handling beans of type {@link SmartLifecycle} should run in. *

The default implementation returns {@code null} which allows other * configurers to decide. As soon as any configurer returns a value, that - * value is used. If no configurer returns a value, then by default - * {@link SmartLifecycle#DEFAULT_PHASE} is used. + * value is used. If no configurer returns a value, then 0 is used. *

It is recommended to use a phase value such as 0 in order to ensure that - * components start before the web server in Spring Boot application. In 6.2.0, - * the default used will change to 0. + * components start before the web server in Spring Boot application. * @since 6.1.4 * @see SmartLifecycle */ diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java index 867e780abe..3d79f53099 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java @@ -254,7 +254,8 @@ public class SubProtocolWebSocketHandler /** * Set the phase that this handler should run in. - *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}. + *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}, but with + * {@code @EnableWebSocketMessageBroker} configuration it is set to 0. * @since 6.1.4 */ public void setPhase(int phase) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHandlerMapping.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHandlerMapping.java index 0d825e50d8..5e4524c986 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHandlerMapping.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHandlerMapping.java @@ -62,7 +62,8 @@ public class WebSocketHandlerMapping extends SimpleUrlHandlerMapping implements /** * Set the phase that this handler should run in. - *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}. + *

By default, this is {@link SmartLifecycle#DEFAULT_PHASE}, but with + * {@code @EnableWebSocketMessageBroker} configuration it is set to 0. * @since 6.1.4 */ public void setPhase(int phase) { diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java index e8a94d3e35..5bacec1a1c 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java @@ -212,10 +212,18 @@ class WebSocketMessageBrokerConfigurationSupportTests { } @Test - void lifecyclePhase() { - ApplicationContext context = createContext(LifecyclePhaseConfig.class); + void lifecyclePhaseDefault() { + ApplicationContext context = createContext(TestChannelConfig.class, TestConfigurer.class); + assertPhase(context, 0); + } - int phase = 99; + @Test + void lifecyclePhaseExplicitlySet() { + ApplicationContext context = createContext(LifecyclePhaseConfig.class); + assertPhase(context, 99); + } + + private static void assertPhase(ApplicationContext context, int phase) { Consumer executorTester = beanName -> assertThat(context.getBean(beanName, ThreadPoolTaskExecutor.class).getPhase()).isEqualTo(phase);