Skip to content

Commit 2b21137

Browse files
committed
Use getTomcatWebServer to create TomcatWebServer instance
TomcatReactiveWebServerFactory's getTomcatWebServer is described as being a hook point the can be overrideden to return a different TomcatWebServer or to apply additional processing to the Tomcat server. Previously, this did not work as the method was not called to create the TomcatWebServer instance. Instead, TomcatWebServer was instantiated and returned directly. This commit updates TomcatReactiveWebServerFactory to call getTomcatWebServer to create the TomcatWebServer instance. A test has also been added to verify that the method is now used. Fixes gh-20386
1 parent 06d870b commit 2b21137

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/embedded/tomcat/TomcatReactiveWebServerFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2019 the original author or authors.
2+
* Copyright 2012-2020 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -112,7 +112,7 @@ public WebServer getWebServer(HttpHandler httpHandler) {
112112
configureEngine(tomcat.getEngine());
113113
TomcatHttpHandlerAdapter servlet = new TomcatHttpHandlerAdapter(httpHandler);
114114
prepareContext(tomcat.getHost(), servlet);
115-
return new TomcatWebServer(tomcat, getPort() >= 0);
115+
return getTomcatWebServer(tomcat);
116116
}
117117

118118
private void configureEngine(Engine engine) {

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/embedded/tomcat/TomcatReactiveWebServerFactoryTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.boot.web.embedded.tomcat;
1818

1919
import java.util.Arrays;
20+
import java.util.concurrent.atomic.AtomicReference;
2021

2122
import org.apache.catalina.Context;
2223
import org.apache.catalina.LifecycleEvent;
@@ -184,4 +185,19 @@ public void sslWithInvalidAliasFailsDuringStartup() {
184185
.isInstanceOf(ConnectorStartFailedException.class);
185186
}
186187

188+
@Test
189+
public void whenGetTomcatWebServerIsOverriddenThenWebServerCreationCanBeCustomized() {
190+
AtomicReference<TomcatWebServer> webServerReference = new AtomicReference<>();
191+
TomcatWebServer webServer = (TomcatWebServer) new TomcatReactiveWebServerFactory() {
192+
193+
@Override
194+
protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
195+
webServerReference.set(new TomcatWebServer(tomcat));
196+
return webServerReference.get();
197+
}
198+
199+
}.getWebServer(new EchoHandler());
200+
assertThat(webServerReference).hasValue(webServer);
201+
}
202+
187203
}

0 commit comments

Comments
 (0)