diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java b/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java index 4bfc632782..400a83e026 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java @@ -176,9 +176,10 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser { ParserContext parserCxt, Object source) { RootBeanDefinition executorDef = null; + Element executor = null; if (channelElement != null) { - Element executor = DomUtils.getChildElementByTagName(channelElement, "executor"); + executor = DomUtils.getChildElementByTagName(channelElement, "executor"); if (executor != null) { executorDef = new RootBeanDefinition(ThreadPoolTaskExecutor.class); String attrValue = executor.getAttribute("core-pool-size"); @@ -199,7 +200,7 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser { } } } - else if (!channelName.equals("brokerChannel")) { + if ((channelElement == null && !channelName.equals("brokerChannel")) || (channelElement != null && executor == null)) { executorDef = new RootBeanDefinition(ThreadPoolTaskExecutor.class); executorDef.getPropertyValues().add("corePoolSize", Runtime.getRuntime().availableProcessors() * 2); executorDef.getPropertyValues().add("maxPoolSize", Integer.MAX_VALUE); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java index 632fe34101..4b5cd1f289 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java @@ -293,6 +293,15 @@ public class MessageBrokerBeanDefinitionParserTests { testExecutor("brokerChannel", 102, 202, 602); } + // SPR-11623 + + @Test + public void customChannelsWithDefaultExecutor() { + loadBeanDefinitions("websocket-config-broker-customchannels-default-executor.xml"); + List> subscriberTypes = Arrays.>asList(SubProtocolWebSocketHandler.class); + testExecutor("clientOutboundChannel", Runtime.getRuntime().availableProcessors() * 2, Integer.MAX_VALUE, 60); + } + @Test public void messageConverters() { loadBeanDefinitions("websocket-config-broker-converters.xml"); diff --git a/spring-websocket/src/test/resources/org/springframework/web/socket/config/websocket-config-broker-customchannels-default-executor.xml b/spring-websocket/src/test/resources/org/springframework/web/socket/config/websocket-config-broker-customchannels-default-executor.xml new file mode 100644 index 0000000000..278f3fef3d --- /dev/null +++ b/spring-websocket/src/test/resources/org/springframework/web/socket/config/websocket-config-broker-customchannels-default-executor.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +