ApplicationFailedEvent executes when application is failed to start. For example if application port is already in use or any other error during start. We can use this event listener to email the error or executing any script upon failure. In this example we will try to run the application twice to generate the failed event.
Try to run the application twice on the same port so in second attempt it will generate the error during start as one instance is already running on that port.
SpringBootTutorialApplication
@SpringBootApplication
public class SpringBootTutorialApplication{
public static void main(String[] args) {
SpringApplication app = new SpringApplication(SpringBootTutorialApplication.class);
//register ApplicationFailedEvent event
app.addListeners((ApplicationFailedEvent event)->{
System.out.println("Executing ApplicationFailedEvent...");
});
//start the application
app.run(args);
}
}
Try to run the application twice on the same port so in second attempt it will generate the error during start as one instance is already running on that port.
Output
Failed event execution statement is highlighted at the end of below output.2019-10-26 15:59:12.523 ERROR 13982 --- [ main] org.apache.catalina.util.LifecycleBase : Failed to start component [Connector[HTTP/1.1-8080]] org.apache.catalina.LifecycleException: Protocol handler start failed at org.apache.catalina.connector.Connector.startInternal(Connector.java:1008) ~[tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.catalina.core.StandardService.addConnector(StandardService.java:227) [tomcat-embed-core-9.0.26.jar:9.0.26] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:263) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:195) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.startWebServer(ServletWebServerApplicationContext.java:297) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:163) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:552) [spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at com.demo.SpringBootTutorialApplication.main(SpringBootTutorialApplication.java:57) [classes/:na] Caused by: java.net.BindException: Address already in use at sun.nio.ch.Net.bind0(Native Method) ~[na:1.8.0_161] at sun.nio.ch.Net.bind(Net.java:433) ~[na:1.8.0_161] at sun.nio.ch.Net.bind(Net.java:425) ~[na:1.8.0_161] at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[na:1.8.0_161] at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) ~[na:1.8.0_161] at org.apache.tomcat.util.net.NioEndpoint.initServerSocket(NioEndpoint.java:230) ~[tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:213) ~[tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1124) ~[tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1210) ~[tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:585) ~[tomcat-embed-core-9.0.26.jar:9.0.26] at org.apache.catalina.connector.Connector.startInternal(Connector.java:1005) ~[tomcat-embed-core-9.0.26.jar:9.0.26] ... 12 common frames omitted 2019-10-26 15:59:12.540 INFO 13982 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] 2019-10-26 15:59:12.555 INFO 13982 --- [ main] ConditionEvaluationReportLoggingListener : Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. Executing ApplicationFailedEvent...
Great article by the great author, it is very massive and informative but still preaches the way to sounds like that it has some beautiful thoughts described so I really appreciate this article. Best Event App service provider.
ReplyDeleteThe ApplicationFailedEvent example demonstrates a useful Spring Boot mechanism for reacting when an application cannot complete its startup process. The port-conflict scenario makes the behavior easy to understand: when a second application instance attempts to bind to the same port, the startup fails and the registered listener executes, providing a clear place for failure-specific actions.
DeleteThis event-driven approach can be useful for operational tasks such as sending an alert, recording diagnostic information, or triggering a script when startup fails. A Spring Boot ReactJS Full Stack Online Course is relevant for developers learning how Spring Boot applications are initialized and how application lifecycle events can be incorporated into a broader REST-based application.
The example also shows why application lifecycle events can be valuable for monitoring and deployment scenarios, where startup failures need to be detected without placing custom checks throughout the application code. A Spring Boot Angular Full Stack Online Course provides a related full-stack context for integrating Spring Boot services with Angular applications while handling backend application lifecycle concerns.
DeleteI will provide you with main features that your app for conferences should include, and our developers can give you some tips concerning ways to enrich your app and make it really competitive. But first things first. More info https://www.cleveroad.com/blog/mobile-app-for-conferences--guide-to-development
ReplyDeleteA4649F4572
ReplyDeletekiralık hacker
hacker arıyorum
belek
kadriye
serik
40E4DB48
ReplyDeleteÇankırı
Karaman
Kastamonu
Mardin
Iğdır
Trabzon
MuÄŸla
Antep
Yozgat
DAA9C791
ReplyDeleteKarasu
Ortaca
Araban
Akçay
Buharkent
Kalkan
Aksu
Serik
Konak
A3C68948
ReplyDeleteAlpu
Åžirinyer
Hendek
Bafra
Yıldırım
Erdek
Karasu
Kulu
İçmeler