Skip to content

Commit 0eb6c0d

Browse files
committed
Defer disabling registry until Tomcat server is being created
Closes gh-16498
1 parent 6787b91 commit 0eb6c0d

File tree

6 files changed

+43
-17
lines changed

6 files changed

+43
-17
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ReactiveWebServerFactoryAutoConfiguration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ public ReactiveWebServerFactoryCustomizer reactiveWebServerFactoryCustomizer(
6565
return new ReactiveWebServerFactoryCustomizer(serverProperties);
6666
}
6767

68+
69+
@Bean
70+
@ConditionalOnClass(name = "org.apache.catalina.startup.Tomcat")
71+
public TomcatReactiveWebServerFactoryCustomizer tomcatReactiveWebServerFactoryCustomizer(
72+
ServerProperties serverProperties) {
73+
return new TomcatReactiveWebServerFactoryCustomizer(serverProperties);
74+
}
75+
6876
@Bean
6977
@ConditionalOnMissingBean
7078
@ConditionalOnProperty(value = "server.forward-headers-strategy",

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/ReactiveWebServerFactoryConfiguration.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.springframework.beans.factory.ObjectProvider;
2525
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2626
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
27-
import org.springframework.boot.autoconfigure.web.ServerProperties;
2827
import org.springframework.boot.web.embedded.jetty.JettyReactiveWebServerFactory;
2928
import org.springframework.boot.web.embedded.jetty.JettyServerCustomizer;
3029
import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory;
@@ -99,12 +98,6 @@ public TomcatReactiveWebServerFactory tomcatReactiveWebServerFactory(
9998
return factory;
10099
}
101100

102-
@Bean
103-
public TomcatReactiveWebServerFactoryCustomizer tomcatReactiveWebServerFactoryCustomizer(
104-
ServerProperties serverProperties) {
105-
return new TomcatReactiveWebServerFactoryCustomizer(serverProperties);
106-
}
107-
108101
}
109102

110103
@Configuration(proxyBeanMethods = false)

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/reactive/TomcatReactiveWebServerFactoryCustomizer.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package org.springframework.boot.autoconfigure.web.reactive;
1818

19-
import org.apache.tomcat.util.modeler.Registry;
20-
2119
import org.springframework.boot.autoconfigure.web.ServerProperties;
2220
import org.springframework.boot.web.embedded.tomcat.TomcatReactiveWebServerFactory;
2321
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
@@ -40,9 +38,8 @@ public TomcatReactiveWebServerFactoryCustomizer(ServerProperties serverPropertie
4038

4139
@Override
4240
public void customize(TomcatReactiveWebServerFactory factory) {
43-
if (!this.serverProperties.getTomcat().getMbeanregistry().isEnabled()) {
44-
Registry.disableRegistry();
45-
}
41+
factory.setDisableMBeanRegistry(
42+
!this.serverProperties.getTomcat().getMbeanregistry().isEnabled());
4643
}
4744

4845
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/servlet/TomcatServletWebServerFactoryCustomizer.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@
1616

1717
package org.springframework.boot.autoconfigure.web.servlet;
1818

19-
import org.apache.tomcat.util.modeler.Registry;
20-
2119
import org.springframework.boot.autoconfigure.web.ServerProperties;
2220
import org.springframework.boot.web.embedded.tomcat.ConfigurableTomcatWebServerFactory;
2321
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
@@ -62,9 +60,7 @@ public void customize(TomcatServletWebServerFactory factory) {
6260
customizeUseRelativeRedirects(factory,
6361
tomcatProperties.getUseRelativeRedirects());
6462
}
65-
if (!tomcatProperties.getMbeanregistry().isEnabled()) {
66-
Registry.disableRegistry();
67-
}
63+
factory.setDisableMBeanRegistry(!tomcatProperties.getMbeanregistry().isEnabled());
6864
}
6965

7066
private void customizeRedirectContextRoot(ConfigurableTomcatWebServerFactory factory,

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.coyote.AbstractProtocol;
3737
import org.apache.coyote.ProtocolHandler;
3838
import org.apache.coyote.http2.Http2Protocol;
39+
import org.apache.tomcat.util.modeler.Registry;
3940
import org.apache.tomcat.util.scan.StandardJarScanFilter;
4041

4142
import org.springframework.boot.util.LambdaSafe;
@@ -82,6 +83,8 @@ public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFac
8283

8384
private int backgroundProcessorDelay;
8485

86+
private boolean disableMBeanRegistry = true;
87+
8588
/**
8689
* Create a new {@link TomcatServletWebServerFactory} instance.
8790
*/
@@ -106,6 +109,9 @@ private static List<LifecycleListener> getDefaultLifecycleListeners() {
106109

107110
@Override
108111
public WebServer getWebServer(HttpHandler httpHandler) {
112+
if (this.disableMBeanRegistry) {
113+
Registry.disableRegistry();
114+
}
109115
Tomcat tomcat = new Tomcat();
110116
File baseDir = (this.baseDirectory != null) ? this.baseDirectory
111117
: createTempDir("tomcat");
@@ -413,4 +419,14 @@ public void setProtocol(String protocol) {
413419
this.protocol = protocol;
414420
}
415421

422+
/**
423+
* Set whether the factory should disable Tomcat's MBean registry prior to creating
424+
* the server.
425+
* @param disableMBeanRegistry whether to disable the MBean registry
426+
* @since 2.2.0
427+
*/
428+
public void setDisableMBeanRegistry(boolean disableMBeanRegistry) {
429+
this.disableMBeanRegistry = disableMBeanRegistry;
430+
}
431+
416432
}

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
import org.apache.coyote.AbstractProtocol;
6161
import org.apache.coyote.ProtocolHandler;
6262
import org.apache.coyote.http2.Http2Protocol;
63+
import org.apache.tomcat.util.modeler.Registry;
6364
import org.apache.tomcat.util.scan.StandardJarScanFilter;
6465

6566
import org.springframework.boot.util.LambdaSafe;
@@ -133,6 +134,8 @@ public class TomcatServletWebServerFactory extends AbstractServletWebServerFacto
133134

134135
private int backgroundProcessorDelay;
135136

137+
private boolean disableMBeanRegistry = true;
138+
136139
/**
137140
* Create a new {@link TomcatServletWebServerFactory} instance.
138141
*/
@@ -167,6 +170,9 @@ private static List<LifecycleListener> getDefaultLifecycleListeners() {
167170

168171
@Override
169172
public WebServer getWebServer(ServletContextInitializer... initializers) {
173+
if (this.disableMBeanRegistry) {
174+
Registry.disableRegistry();
175+
}
170176
Tomcat tomcat = new Tomcat();
171177
File baseDir = (this.baseDirectory != null) ? this.baseDirectory
172178
: createTempDir("tomcat");
@@ -707,6 +713,16 @@ public void setBackgroundProcessorDelay(int delay) {
707713
this.backgroundProcessorDelay = delay;
708714
}
709715

716+
/**
717+
* Set whether the factory should disable Tomcat's MBean registry prior to creating
718+
* the server.
719+
* @param disableMBeanRegistry whether to disable the MBean registry
720+
* @since 2.2.0
721+
*/
722+
public void setDisableMBeanRegistry(boolean disableMBeanRegistry) {
723+
this.disableMBeanRegistry = disableMBeanRegistry;
724+
}
725+
710726
/**
711727
* {@link LifecycleListener} to disable persistence in the {@link StandardManager}. A
712728
* {@link LifecycleListener} is used so not to interfere with Tomcat's default manager

0 commit comments

Comments
 (0)