1. Overview

In this article, We are going to discuss about how we can implement spring boot startup failer listener or Spring boot startup failure analyzer example. For any reason, if the application startup gets failed then we need to write our custom message to more specific and human-readable message. FailureAnalyzer provide a way to customize our message based on startup failed exception.

Step to Configure startup failed analyzer

  1. Let’s define CustomFailedAnalyzer which implements FailureAnalyzer and override analyze() method. When application startup failed at that time analyze() method will be called automatically by spring boot where return new FailureAnalysis which accept action, custom message and Throwable object:
  2. If you can not handle exception then return null so spring boot will try to handle exception from other implementation.
package com.javadeveloperzone;

import org.springframework.boot.diagnostics.FailureAnalysis;
import org.springframework.boot.diagnostics.FailureAnalyzer;

/**
 * Created by JavaDeveloperZone on 03-05-2018.
 * Here we have implements FailureAnalyzer and override analyze method which will be
 * called automatically when application startup will get failed.
 */
public class CustomFailedAnalyzer implements FailureAnalyzer {
    @Override
    public FailureAnalysis analyze(Throwable failure) {
        return new FailureAnalysis("Custom Failed Message : ",failure.getMessage(),failure);
    }
}

2. Create spring.factories inside resources/META-INF/ and register org.springframework.boot.diagnostics.FailureAnalyzer listener:

org.springframework.boot.diagnostics.FailureAnalyzer=com.javadeveloperzone.CustomFailedAnalyzer

2. Example

Spring boot startup failure analyzer example

Spring boot startup failure analyzer example

2.1 pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>spring-boot-example</groupId>
    <artifactId>spring-boot-example</artifactId>
    <version>1.0-SNAPSHOT</version>
    <description>Spring boot startup failure analyzer example</description>
    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.4.RELEASE</version>
    </parent>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <!-- Package as an executable jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2.2 application.properties

server.port=8181

2.3 spring.factories

spring.factories must be inside resources/META-INF

org.springframework.boot.diagnostics.FailureAnalyzer=com.javadeveloperzone.CustomFailedAnalyzer

2.4 CustomFailedAnalyzer

Here we have defined CustomFailedAnalyzer and implements FailureAnalyzer interface. analyze() method will automatically call when application startup will be failed for any reason.

package com.javadeveloperzone;

import org.springframework.boot.diagnostics.FailureAnalysis;
import org.springframework.boot.diagnostics.FailureAnalyzer;

/**
 * Created by JavaDeveloperZone on 03-05-2018.
 * Here we have implements FailureAnalyzer and override analyze method which will be
 * called automatically when application startup will get failed.
 */
public class CustomFailedAnalyzer implements FailureAnalyzer {
    @Override
    public FailureAnalysis analyze(Throwable failure) {
        return new FailureAnalysis("Custom Failed Message : ",failure.getMessage(),failure);
    }
}

2.5 SpringBootConfig

package com.javadeveloperzone;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

/**
 * Created by JavaDeveloperZone on 19-07-2017.
 */

@SpringBootApplication
@ComponentScan // Using a root package also allows the @ComponentScan annotation to be used without needing to specify a basePackage attribute
public class SpringBootConfig {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(SpringBootConfig.class, args);            // it wil start application
    }
}

2.6 Output

Let’s run same spring application two times so it second time application will fail because of the port is used.

> java -jar spring-boot-example-1.0-SNAPSHOT.jar

> java -jar spring-boot-example-1.0-SNAPSHOT.jar

 . ____ _ __ _ _
 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/ ___)| |_)| | | | | || (_| | ) ) ) )
 ' |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot :: (v1.5.4.RELEASE)
2018-05-03 21:25:49.996 INFO 47856 --- [ main] com.javadeveloperzone.SpringBootConfig : Starting SpringBootConfig on Mahesh with PID 47856 (F:\extrawork\spring-boot\spring-boot-failure-analyzer-example\target\classes started by Lenovo in F:\extrawork\spring-boot\spring-boot-failure-analyzer-example)
2018-05-03 21:25:50.000 INFO 47856 --- [ main] com.javadeveloperzone.SpringBootConfig : No active profile set, falling back to default profiles: default
***************************
APPLICATION FAILED TO START
***************************

Description:

Custom Failed Message : 

Action:

Connector configured to listen on port 8181 failed to start

3. Conclusion

We have learned here about how we can write our custom code while spring boot application will get failed. especially for microservice architecture we so many services are available in that case custom messages will make issue finding issue while application startup failed.

4. References

5. Source Code

spring-boot-failure-analyzer-example (176 KB)

Was this post helpful?
Let us know, if you liked the post. Only in this way, we can improve us.
Yes
No

Leave a Reply

Your email address will not be published. Required fields are marked *