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

时间:2019-02-13 16:05:10

标签: java spring spring-boot

在启动过程中,我的应用程序创建了一个安排任务执行程序中某些任务的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");
    }
}

1 个答案:

答案 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");
    }
}