通过阅读Spring-boot docs,我了解到我可以创建一个实现ApplicationRunner
或CommandLineRunner
的类,以便在应用程序启动之前执行代码。
来自文档:
在调用任何应用程序和命令行运行程序之后,将发送ApplicationReadyEvent。它表明该应用程序已准备就绪,可以处理请求。
但是,我有以下课程:
@Component
public class MyClass implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
Thread.sleep(10000);
}
}
而不是等待那10秒钟启动,而是说应用程序在3秒内启动:
2018-11-19 08:51:21.906信息24872 --- [main] o.s.b.w.embedded.tomcat.TomcatWebServer:Tomcat在端口8080(http)上启动,上下文路径为
2018-11-19 08:51:21.909信息24872 --- [main] com.mycompany.Application:在3.565秒内启动应用程序(JVM运行4.016)
我假设我的课程正在另一个线程中运行。但是我感觉这不能保证我的代码在任何可能的传入请求之前已经完成执行。
这是正确的方法吗?我想念什么吗?