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
This commit is contained in:
parent
06d870bdd0
commit
2b2113714d
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 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.
|
||||
|
@ -112,7 +112,7 @@ public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFac
|
|||
configureEngine(tomcat.getEngine());
|
||||
TomcatHttpHandlerAdapter servlet = new TomcatHttpHandlerAdapter(httpHandler);
|
||||
prepareContext(tomcat.getHost(), servlet);
|
||||
return new TomcatWebServer(tomcat, getPort() >= 0);
|
||||
return getTomcatWebServer(tomcat);
|
||||
}
|
||||
|
||||
private void configureEngine(Engine engine) {
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
package org.springframework.boot.web.embedded.tomcat;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import org.apache.catalina.Context;
|
||||
import org.apache.catalina.LifecycleEvent;
|
||||
|
@ -184,4 +185,19 @@ public class TomcatReactiveWebServerFactoryTests extends AbstractReactiveWebServ
|
|||
.isInstanceOf(ConnectorStartFailedException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenGetTomcatWebServerIsOverriddenThenWebServerCreationCanBeCustomized() {
|
||||
AtomicReference<TomcatWebServer> webServerReference = new AtomicReference<>();
|
||||
TomcatWebServer webServer = (TomcatWebServer) new TomcatReactiveWebServerFactory() {
|
||||
|
||||
@Override
|
||||
protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
|
||||
webServerReference.set(new TomcatWebServer(tomcat));
|
||||
return webServerReference.get();
|
||||
}
|
||||
|
||||
}.getWebServer(new EchoHandler());
|
||||
assertThat(webServerReference).hasValue(webServer);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue