gpt4 book ai didi

java - 如何在抛出 BeanCreationException 后关闭应用程序

转载 作者:行者123 更新时间:2023-11-30 07:42:25 24 4
gpt4 key购买 nike

在启动过程中,我的应用程序创建了一个 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");
}
}

最佳答案

你可以添加一个@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");
}
}

关于java - 如何在抛出 BeanCreationException 后关闭应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54674531/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com