Merge branch '3.5.x'

Closes gh-46181
This commit is contained in:
Andy Wilkinson
2025-06-23 20:33:18 +01:00
2 changed files with 20 additions and 4 deletions
@@ -17,6 +17,7 @@
package org.springframework.boot.autoconfigure.web.embedded;
import io.undertow.Undertow;
import io.undertow.servlet.api.DeploymentInfo;
import org.apache.catalina.startup.Tomcat;
import org.apache.coyote.UpgradeProtocol;
import org.eclipse.jetty.ee10.webapp.WebAppContext;
@@ -110,10 +111,16 @@ public class EmbeddedWebServerFactoryCustomizerAutoConfiguration {
return new UndertowWebServerFactoryCustomizer(environment, serverProperties);
}
@Bean
@ConditionalOnThreading(Threading.VIRTUAL)
UndertowDeploymentInfoCustomizer virtualThreadsUndertowDeploymentInfoCustomizer() {
return (deploymentInfo) -> deploymentInfo.setExecutor(new VirtualThreadTaskExecutor("undertow-"));
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(DeploymentInfo.class)
static class UndertowServletWebServerFactoryCustomizerConfiguration {
@Bean
@ConditionalOnThreading(Threading.VIRTUAL)
UndertowDeploymentInfoCustomizer virtualThreadsUndertowDeploymentInfoCustomizer() {
return (deploymentInfo) -> deploymentInfo.setExecutor(new VirtualThreadTaskExecutor("undertow-"));
}
}
}
@@ -23,6 +23,7 @@ import org.junit.jupiter.api.condition.JRE;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.web.embedded.EmbeddedWebServerFactoryCustomizerAutoConfiguration.UndertowWebServerFactoryCustomizerConfiguration;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.WebApplicationContextRunner;
import org.springframework.boot.web.embedded.undertow.UndertowDeploymentInfoCustomizer;
import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebApplicationContext;
@@ -54,4 +55,12 @@ class UndertowWebServerFactoryCustomizerConfigurationTests {
});
}
@Test
@EnabledForJreRange(min = JRE.JAVA_21)
void virtualThreadCustomizationBacksOffWithoutUndertowServlet() {
this.contextRunner.withPropertyValues("spring.threads.virtual.enabled=true")
.withClassLoader(new FilteredClassLoader("io.undertow.servlet"))
.run((context) -> assertThat(context).doesNotHaveBean(UndertowDeploymentInfoCustomizer.class));
}
}