如何在启动期间终止Spring应用程序?

时间:2015-07-24 09:20:53

标签: spring spring-boot

我有一个Spring Boot应用程序,它有一些外部依赖项(例如,项目外部需要存在的文件,以便应用程序正常启动)。

我的一个bean有一个@PostConstruct方法进行初始化。如果初始化不成功,我想干净利落地退出 - 例如,找不到文件。

((ConfigurableApplicationContext)applicationContext).close();方法中调用@PostConstruct会导致

java.lang.IllegalStateException: LifecycleProcessor not initialized - call 'refresh' before invoking lifecycle methods via the context

以及其他一系列例外情况。有没有办法正确地做到这一点?

2 个答案:

答案 0 :(得分:0)

您可以使用Sytem退出静态方法,它终止当前正在运行的Java虚拟机。 传递的代码指示终止状态。按照惯例,非零状态代码表示异常终止。

exp:

    @PostConstruct
        public void init() {

                try {
                    File initialFile = new File(quartzPropertiesFile);
                    InputStream targetStream = new FileInputStream(initialFile);
                } catch(Exception e) {
                    LOGGER.error("Error while loading properties file {}", e, quartzPropertiesFile);
                    System.exit(0);
                }

}

答案 1 :(得分:0)

您不能在System.exit(0)中使用@PostConstruct,关机将等待startupShutdownMonitor的锁,无法退出。