目标
springboot项目成功启动后,我们有时想输出自定义信息,例如swagger地址。
实现原理
利用springboot的事件广播机制,springboot启动成功后EventPublishingRunListener 会发送一个ApplicationReadyEvent事件。我们可以实现一个自定义的ApplicationListener接收ApplicationReadyEvent事件。
自定义的ApplicationListener
public class ReadyApplicationListener implements ApplicationListener<ApplicationReadyEvent> {
@SneakyThrows
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
ConfigurableApplicationContext application = event.getApplicationContext();
log.info("项目启动成功!");
Environment env = application.getEnvironment();
log.info("项目地址 swagger 地址: http://{}:{}{}/swagger-ui.html", InetAddress.getLocalHost().getHostAddress(), env.getProperty("server.port"),env.getProperty("server.servlet.context-path")==null?"":env.getProperty("server.servlet.context-path"));
}
}
在自已的Application加入自定义的ApplicationListener
@Slf4j
@SpringBootApplication
public class DemoApplication {
@SneakyThrows
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(DemoApplication.class);
Set set = springApplication.getListeners();
set.add(new ReadyApplicationListener()); //加入自定义的ApplicationListener
springApplication.setListeners( set);
springApplication.run(args);
}
}
最后效果
//省略前面日志输出
02-01 13:36:06.515 [main] INFO s.d.s.w.r.o.CachingOperationNameGenerator:40 - Generating unique operation named: saveUsingPOST_1
02-01 13:36:06.597 [main] INFO s.d.s.w.r.o.CachingOperationNameGenerator:40 - Generating unique operation named: listUsingGET_1
02-01 13:36:06.634 [main] INFO o.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-8103"]
02-01 13:36:06.664 [main] INFO o.s.b.w.embedded.tomcat.TomcatWebServer:203 - Tomcat started on port(s): 8103 (http) with context path '/demo'
02-01 13:36:06.667 [main] INFO com.demo.DemoApplication:61 - Started DemoApplication in 6.888 seconds (JVM running for 7.452)
02-01 13:36:06.715 [main] INFO com.demo.ReadyApplicationListener:25 - 项目启动成功!
02-01 13:36:06.717 [main] INFO com.demo.ReadyApplicationListener:27 - 项目地址 swagger 地址: http://172.20.5.42:8103/demo/swagger-ui.html