SpringBoot Application事件监听的实现方案

网友投稿 597 2023-01-06


SpringBoot Application事件监听的实现方案

先说结论

SpringBoot Application共支持6种事件监听,按顺序分别是:

ApplicationStartingEvent:在Spring最开始启动的时候触发

ApplicationEnvironmentPreparedEvent:在Spring已经准备好上下文但是上下文尚未创建的时候触发

ApplicationPreparedEvent:在Bean定义加载之后、刷新上下文之前触发

ApplicationStartedEvent:在刷新上下文之后、调用application命令之前触发

ApplicationReadyEvent:在调用applicaiton命令之后触发

ApplicationFailedEvent:在启动Spring发生异常时触发

另外:

ApplicationRunner和CommandLineRunner的执行在第五步和第六步之间

Bean的创建在第三步和第四步之间

在启动类中,执行SpringApplication.run()方法后的代码,会在第六步后执行

再上代码:

ApplicationStartingEvent

public class ApplicationStartingEventListener implements ApplicationListener {

@Override

public void onApplicationEvent(ApplicationStartingEvent applicationStartingEvent) {

System.out.println("============>>>>> applicationStartingEvent is trigged");

System.out.println(applicationStartingEvent.getTimestamp());

System.out.println("============>>>>> End");

}

}

ApplicationEnvironmentPreparedEvent

public class ApplicationEnvironmentPreparedEventListener implements ApplicationListener {

@Override

public void onApplicationEvent(ApplicationEnvironmentPreparedEvent applicationEnvironmentPreparedEvent) {

System.out.println("============>>>>> ApplicationEnvironmentPreparedEvent is trigged")http://;

System.out.println(applicationEnvironmentPreparedEvent.getTimestamp());

System.out.println("============>>>>> End");

}

}

ApplicationPreparedEvent

public class ApplicationPreparedEventListener implements ApplicationListener {

@Override

public void onApplicationEvent(ApplicationPreparedEvent applicationPreparedEvent) {

System.out.println("============>>>>> applicationPreparedEvent is trigged");

System.out.println(applicationPreparedEvent.getTimestamp());

System.out.println("============>>>>> End");

}

}

ApplicationStartedEvent

public class ApplicationStartedEventListener implements ApplicationListener {

@Override

public void onApplicationEvent(ApplicationStartedEvent applicationStartedEvent) {

System.out.println("============>>>>> applicationStartedEvent is trigged");

System.out.println(applicationStartedEvent.getTimestamp());

System.out.println("============>>>>> End");

}

}

ApplicationReadyEvent

public class ApplicationReadyEventListener implements ApplicationListener {

@Override

public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {

System.out.println("============>>>>> applicationReadyEvent is trigged");

System.out.println(applicationReadyEvent.getTimestamp());

System.out.println("============>>>>> End");

}

}

ApplicationFailedEvent

public class ApplicationFailedEventListener implements ApplicationListener {

@Override

public void onApplicationEvent(ApplicationFailedEvent applicationFailedEvent) {

System.out.println("============>>>>> ApplicationFailedEvent is trigged");

System.out.println(applicationFailedEvent.getTimestamp());

System.out.println("============>>>>> End");

}

}

主启动类

@SpringBootApplication

public class SpringBootTestApplication {

public static void main(String[] args) {

SpringApplication springApplication = new SpringApplication(SpringBootTestApplication.class);

springApplication.addListeners(new ApplicationEnvironmentPreparedEventListener());

springApplication.addListeners(new ApplicationFailedEventListener());

springApplication.addListeners(new ApplicationPreparedEventListener());

springApplication.addListeners(new ApplicationReadyEventListener());

springApplication.addListeners(new ApplicationStartedEventListener());

springApplication.addListeners(new ApplicationStartingEventListener());

springApplication.run(args);

}

}

运行结果

Connected to the target VM, address: '127.0.0.1:62927', transport: 'socket'

============>>>>> applicationStartingEvent is trigged

============>>>>> End

============>>>>> ApplicationEnvironmentPreparedEvent is trigged

============>>>>> End

. ____ _ __ _ _

/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \

( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \

\\/ ___)| |_)| | | | | || (_| | ) ) ) )

' |____| .__|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot :: (v2.0.3.RELEASE)

2018-11-01 14:52:35.117 INFO 2044 --- [ main] c.l.s.b.test.SpringBootTestApplication : Starting SpringBootTestApplication on EDIANZU-ETGVGB5 with PID 2044 (D:\Code\SelfCode\SpringCloud\Test\SpringBootTest\target\classes started by Administrator in D:\Code\SelfCode\SpringCloud)

2018-11-01 14:52:35.122 INFO 2044 --- [ main] c.l.s.b.test.SpringBootTestApplication : No active profile set, falling back to default profiles: default

============>>>>> applicationPreparedEvent is trigged

============>>>>> End

2018-11-01 14:52:35.212 INFO 2044 --- [ main] ConfigServletWebServerApplicationContext : Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@3406472c: startup date [Thu Nov 01 14:52:35 CST 2018]; root of context hierarchy

2018-11-01 14:52:36.891 INFO 2044 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)

2018-11-01 14:52:36.920 INFO 2044 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]

2018-11-01 14:52:36.920 INFO 2044 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.31

2018-11-01 14:52:36.925 INFO 2044 --- [ost-startStop-1] o.a.catalina.core.AprLifecycleListener : The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [D:\Program Files\Java\jdk1.8.0_191\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files (xwTlsFnk86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\ThinkPad\Bluetooth Software\;C:\Program Files\ThinkPad\Bluetooth Software\syswow64;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;D:\Program Files\Java\jdk1.8.0_191\bin;D:\Program Files\Git\cmd;D:\Program Files\apache-maven-3.5.4\bin;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;.]

2018-11-01 14:52:37.048 INFO 2044 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext

2018-11-01 14:52:37.048 INFO 2044 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1841 ms

2018-11-01 14:52:37.377 INFO 2044 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]

2018-11-01 14:52:37.389 INFO 2044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]

2018-11-01 14:52:37.390 INFO 2044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

2018-11-01 14:52:37.390 INFO 2044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]

2018-11-01 14:52:37.390 INFO 2044 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]

2018-11-01 14:52:37.598 INFO 2044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2018-11-01 14:52:37.857 INFO 2044 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@3406472c: startup date [Thu Nov 01 14:52:35 CST 2018]; root of context hierarchy

2018-11-01 14:52:37.922 INFO 2044 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)

2018-11-01 14:52:37.923 INFO 2044 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)

2018-11-01 14:52:37.973 INFO 2044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2018-11-01 14:52:37.973 INFO 2044 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2018-11-01 14:52:38.160 INFO 2044 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup

2018-11-01 14:52:38.206 INFO 2044 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''

2018-11-01 14:52:38.212 INFO 2044 --- [ main] c.l.s.b.test.SpringBootTestApplication : Started SpringBootTestApplication in 3.976 seconds (JVM running for 5.088)

============>>>>> applicationStartedEvent is trigged

============>>>>> End

============>>>>> applicationReadyEvent is trigged

============>>>>> End


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:做接口测试的三要素有哪些(做接口测试需要哪些技术)
下一篇:java常用工具类 Random随机数、MD5加密工具类
相关文章

 发表评论

暂时没有评论,来抢沙发吧~