在考虑如何在Spring Boot中运行无限任务(参见我之前的question)之后,我决定这样做:
@Component
@EnableAsync
public class MyRunner implements CommandLineRunner {
@Autowired
private ScheduledExecutorService scheduledExecutorService;
@Async
@Override
public void run(String... args) throws Exception {
try {
infiniteLoop();
} finally {
this.scheduledExecutorService.shutdown();
}
}
}
这允许SpringApplication#run
方法完全完成。
作为整个事情的一部分,我已经宣布了一个ScheduledExecutorService
bean。我的问题是,如果infiniteLoop()
引发意外的异常,Executor
将阻止应用程序在外部管理时分流。
有没有更好的方法来处理这种情况?或者这是finally
块的好用吗?