当前位置: 代码迷 >> java >> 抛出BeanCreationException后如何关闭应用程序
  详细解决方案

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

热度:119   发布时间:2023-07-31 11:36:05.0

在启动过程中,我的应用程序创建了bean,该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");
    }
}
  相关解决方案