Skip to main content

Fixing Tomcat Slow startup


Fixing Tomcat Slow startup with custom jar files inside Tomcat/lib directory.


Many a times, we come across some scenarios wherein there is a need to add certain jar files inside Tomcat/lib directory. 

This case also arises when we are introducing a Servlet Filter in our web-app. And some external classes/ libraries are referred. In such scenarios, it is required that such classes are provided at Tomcat Server Startup. Mostly in the jar file.

And when you add some custom libraries inside lib folder, Tomcat Server takes more time to boot than usual. This can be frustrating for some, as it is only consuming some time.

But, this time consuming startup can be avoided.

Tomcat provides a way to skip scanning the jars mentioned in tomcat.util.scan.StandardJarScanFilter.jarsToSkip property inside catalina.properties file.

Add the custom jar that you suspect is taking more time during Tomcat startup.

The Comment mentions : 

# Default list of JAR files that should not be scanned using the JarScanner

# functionality. This is typically used to scan JARs for configuration

# information. JARs that do not contain such information may be excluded from

# the scan to speed up the scanning process. This is the default list. JARs on

# this list are excluded from all scans. The list must be a comma separated list

# of JAR file names.


Make sure to add the pattern to skip the jars. Else the jar file is scanned for any configuration information, and it takes some time, hereby delaying server startup.


Do try it out, and let me know if it works.

Do drop some comments is any issues are faced.


=============== Happy Coding ===============


Comments

Popular posts from this blog

Add/Modify Header Values in Java HttpServletRequest using Servlet Filters

Add/Modify Header Values in Java HttpServletRequest using Servlet Filters Steps to Modify Request Headers in a Servlet Request. This example will demonstrate how to modify 'Content-Type' header in Java Servlet Filter. In order to achieve this, use a custom wrapper Class, that extends HttpServletRequestWrapper. Thereafter, we need to override certain methods inside this custom Class. getHeader(String name) getHeaders(String name) getHeaderNames() getParameter(final String name) Code snippet for overriding above methods.     @Override     public String getHeader(String name) {     String header = super.getHeader(name); if ("content-type".equalsIgnoreCase(name)){ System.out.println("Adds Header Content-Type as application/json"); return "application/json"; }         return header;     }          @Override     public Enumeration ...

Fixing Keycloak Error : MediaType not set on path , with response status 200

Using a custom endpoint with Media Type set as 'Application/Json'. When this endpoint is accessed, below error is returned. ERROR [org.keycloak.headers.DefaultSecurityHeadersProvider] (default task-16) MediaType not set on path /auth/realms/my-realm/broker/keycloak-oidc/token, with response status 200 06:31:08,489 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-16) Uncaught server error: javax.ws.rs.InternalServerErrorException: HTTP 500 Internal Server Error at org.keycloak.keycloak-services@10.0.2//org.keycloak.headers.DefaultSecurityHeadersProvider.addHeaders(DefaultSecurityHeadersProvider.java:71) at org.keycloak.keycloak-services@10.0.2//org.keycloak.services.filters.KeycloakSecurityHeadersFilter.filter(KeycloakSecurityHeadersFilter.java:36) The fix for this is to bind the blank response to Application/Json as follows: return Response.ok(json, MediaType.APPLICATION_JSON).build(); Do try it out, and let me know if it works. Do drop some comments is an...

Run Spring Boot application in Standalone Tomcat Server

How to run Spring Boot application on Tomcat To deploy a Spring Boot application on existing Tomcat Server, or to bundle it as war file and deploy on Tomcat, following changes are required: Change to war packaging in pom.xml: <packaging>war Application Main class to extend  SpringBootServletInitializer. Override configure method in this class.                protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {                        return application.sources(Application.class);                } Add Tomcat-starter dependency in pom.xml. <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-tomcat</artifactId>     <scope>provided</scope> </dependency...