From 807d6764afc692308179f27c93b09ceab085d841 Mon Sep 17 00:00:00 2001 From: Andreas Svanberg <andreass@dsv.su.se> Date: Thu, 16 May 2024 23:43:21 +0200 Subject: [PATCH] Faster startup time by avoiding class-path scanning Disables Spring's built-in ServletContainerInitializer which uses WebApplicationInitializer SPI that is discovered via slow class-path scanning. Now directly, and only, call the SpringBootServletInitializer via our own ServletContainerInitializer instead. Be mindful if, in the future, we rely on other WebApplicationInitializers that will now not be run. --- war/src/main/java/se/su/dsv/scipro/war/Main.java | 10 +++++++++- .../jakarta.servlet.ServletContainerInitializer | 1 + war/src/main/webapp/WEB-INF/web.xml | 5 ++--- 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 war/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer diff --git a/war/src/main/java/se/su/dsv/scipro/war/Main.java b/war/src/main/java/se/su/dsv/scipro/war/Main.java index 71a5c80da3..3f629e21ab 100644 --- a/war/src/main/java/se/su/dsv/scipro/war/Main.java +++ b/war/src/main/java/se/su/dsv/scipro/war/Main.java @@ -2,6 +2,9 @@ package se.su.dsv.scipro.war; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; +import jakarta.servlet.ServletContainerInitializer; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import org.apache.wicket.protocol.http.WebApplication; import org.apache.wicket.protocol.http.WicketFilter; import org.apache.wicket.spring.injection.annot.SpringComponentInjector; @@ -35,7 +38,12 @@ import java.util.Set; @SpringBootApplication @EntityScan("se.su.dsv.scipro") @Import({CoreConfig.class, ApiConfig.class}) -public class Main extends SpringBootServletInitializer { +public class Main extends SpringBootServletInitializer implements ServletContainerInitializer { + @Override + public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException { + onStartup(ctx); + } + @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Main.class); diff --git a/war/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer b/war/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer new file mode 100644 index 0000000000..ad4ffa3bbd --- /dev/null +++ b/war/src/main/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer @@ -0,0 +1 @@ +se.su.dsv.scipro.war.Main diff --git a/war/src/main/webapp/WEB-INF/web.xml b/war/src/main/webapp/WEB-INF/web.xml index d78229ac6f..b346f3b49c 100755 --- a/war/src/main/webapp/WEB-INF/web.xml +++ b/war/src/main/webapp/WEB-INF/web.xml @@ -5,9 +5,8 @@ <display-name>SciPro</display-name> - <listener> - <listener-class>org.springframework.web.SpringServletContainerInitializer</listener-class> - </listener> + <!-- disables Spring's built in ServletContainerInitializer which causes a slow class path scanning --> + <absolute-ordering/> <session-config> <session-timeout>480</session-timeout>