From 0f707706f1ef669c72b3796ac9a44f17ff363e6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Fri, 26 Jan 2024 11:46:34 +0100 Subject: [PATCH] Stop setting a thread name prefix for externally defined Executors This commit updates the WebSocket message broker configuration to stop setting a thread name prefix for externally defined Executors. This used to apply to: * clientInboundChannel with a thread name prefix of "clientInboundChannel-". * clientOutboundChannel with a thread name prefix of "clientOutboundChannel-". * brokerChannel with a thread name prefix of "brokerChannel-". Closes gh-32132 --- .../simp/config/ChannelRegistration.java | 4 +++- .../simp/config/TaskExecutorRegistration.java | 15 ++++++++++++++- .../simp/config/ChannelRegistrationTests.java | 5 ++--- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/ChannelRegistration.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/ChannelRegistration.java index be7502afdf..25215fa246 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/ChannelRegistration.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/ChannelRegistration.java @@ -114,7 +114,9 @@ public class ChannelRegistration { } else if (this.registration != null) { ThreadPoolTaskExecutor registeredTaskExecutor = this.registration.getTaskExecutor(); - customizer.accept(registeredTaskExecutor); + if (!this.registration.isExternallyDefined()) { + customizer.accept(registeredTaskExecutor); + } return registeredTaskExecutor; } else { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/TaskExecutorRegistration.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/TaskExecutorRegistration.java index f8baf3f2f3..f9cfdb07ad 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/TaskExecutorRegistration.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/TaskExecutorRegistration.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2024 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. @@ -29,6 +29,8 @@ import org.springframework.util.Assert; */ public class TaskExecutorRegistration { + private final boolean externallyDefined; + private final ThreadPoolTaskExecutor taskExecutor; @Nullable @@ -49,6 +51,7 @@ public class TaskExecutorRegistration { * {@link ThreadPoolTaskExecutor}. */ public TaskExecutorRegistration() { + this.externallyDefined = false; this.taskExecutor = new ThreadPoolTaskExecutor(); this.taskExecutor.setCorePoolSize(Runtime.getRuntime().availableProcessors() * 2); this.taskExecutor.setAllowCoreThreadTimeOut(true); @@ -60,6 +63,7 @@ public class TaskExecutorRegistration { * @param taskExecutor the executor to use */ public TaskExecutorRegistration(ThreadPoolTaskExecutor taskExecutor) { + this.externallyDefined = true; Assert.notNull(taskExecutor, "ThreadPoolTaskExecutor must not be null"); this.taskExecutor = taskExecutor; } @@ -122,6 +126,15 @@ public class TaskExecutorRegistration { return this; } + /** + * Specify if the task executor has been supplied. + * @return {@code true} if the task executor was provided, {@code false} if + * it has been created internally + * @since 6.2 + */ + protected boolean isExternallyDefined() { + return this.externallyDefined; + } protected ThreadPoolTaskExecutor getTaskExecutor() { if (this.corePoolSize != null) { diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/config/ChannelRegistrationTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/config/ChannelRegistrationTests.java index ea5ae89630..3cc45927c9 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/config/ChannelRegistrationTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/config/ChannelRegistrationTests.java @@ -73,15 +73,14 @@ class ChannelRegistrationTests { } @Test - void taskRegistrationWithExistingThreadPoolTaskExecutor() { + void taskRegistrationWithExistingThreadPoolTaskExecutorDoesNotInvokeCustomizer() { ThreadPoolTaskExecutor existingExecutor = mock(ThreadPoolTaskExecutor.class); ChannelRegistration registration = new ChannelRegistration(); registration.taskExecutor(existingExecutor); assertThat(registration.hasExecutor()).isTrue(); Executor executor = registration.getExecutor(this.fallback, this.customizer); assertThat(executor).isSameAs(existingExecutor); - verifyNoInteractions(this.fallback); - verify(this.customizer).accept(executor); + verifyNoInteractions(this.fallback, this.customizer); } @Test