Skip to content

Commit abe3d38

Browse files
committed
Fix OoM error when starting Tomcat with max int load on startup
Fixes gh-17927
1 parent ab87b2a commit abe3d38

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ private Stream<Wrapper> getLoadOnStartupWrappers(Container[] children) {
7171
Wrapper wrapper = (Wrapper) child;
7272
int order = wrapper.getLoadOnStartup();
7373
if (order >= 0) {
74-
grouped.computeIfAbsent(order, ArrayList::new);
75-
grouped.get(order).add(wrapper);
74+
grouped.computeIfAbsent(order, (o) -> new ArrayList<>()).add(wrapper);
7675
}
7776
}
7877
return grouped.values().stream().flatMap(List::stream);

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

+15
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,21 @@ protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
519519
() -> factory.getWebServer((context) -> context.addListener(new FailingServletContextListener())));
520520
}
521521

522+
@Test
523+
public void registerJspServletWithDefaultLoadOnStartup() {
524+
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(0);
525+
factory.addInitializers(new ServletContextInitializer() {
526+
527+
@Override
528+
public void onStartup(ServletContext servletContext) throws ServletException {
529+
servletContext.addServlet("manually-registered-jsp-servlet", JspServlet.class);
530+
}
531+
532+
});
533+
this.webServer = factory.getWebServer();
534+
this.webServer.start();
535+
}
536+
522537
@Override
523538
protected JspServlet getJspServlet() throws ServletException {
524539
Tomcat tomcat = ((TomcatWebServer) this.webServer).getTomcat();

0 commit comments

Comments
 (0)