在启动过程中,我的应用程序创建了一个安排任务执行程序中某些任务的bean,然后在创建另一个bean之后失败。 这使我的应用程序处于不死状态,在该状态下,应用程序看起来像在运行,但不提供功能。 我不知道如何才能全局处理BeanCreationException以提供适当的关闭。
这是我的示例代码
@SpringBootApplication
@EnableAutoConfiguration
public class Application {
ExecutorService executorService = Executors.newCachedThreadPool();
public Application(){
executorService.submit(()-> {while(true);});
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Service
public class FaultyService {
public FaultyService(){
throw new RuntimeException("error");
}
}
答案 0 :(得分:3)
您可以添加@PreDestroy以关闭执行程序。但是,响应Thread.interrupt()
仍然是您线程的责任,因此您的无限while循环不会被杀死,但是您的那只是一个人为的示例,因此我也进行了更改:
@SpringBootApplication
@EnableAutoConfiguration
public class Application {
ExecutorService executorService = Executors.newCachedThreadPool();
public Application() {
executorService.submit(() -> {
while (true)
{
if (Thread.interrupted()) break;
}
});
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@PreDestroy
public void tearDownExecutor() {
executorService.shutdownNow();
}
}
@Service
public class FaultyService {
public FaultyService(){
throw new RuntimeException("error");
}
}