如何在Spring Boot的启动过程中关闭应用程序

时间:2018-11-08 10:01:26

标签: java spring-boot

我对spring boot中的启动有疑问,如何在启动期间关闭应用程序,例如,我有以下问题

application.yml

ansi:
   true

我有以下@Configuration类:

@Configuration
class AppConfig {
   @Value('${ansi}')
   String ansi;


   @Bean
   getAnsi() {
        if(ansi.equals("true")) {
             Ansi ansiObj = new Ansi();
             ansiObj.ansi = ansi;
             return ansiObj;
        }
   }
}

class Ansi {
   String ansi;
}

ansi中的application.ymltrue时,它将继续,否则,应关闭该应用程序,我们可以在bean创建期间关闭该应用程序吗?这是一个好习惯吗?有什么好的方法可以解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果bean引发异常,那么Spring将不会继续,并且该过程将结束。

if(ansi.equals("true")) {
     Ansi ansiObj = new Ansi();
     ansiObj.ansi = ansi;
     return ansiObj;
}
else  {
    throw new IllegalArgumentException("reason");
}

我不能说我曾经有过用例,但是我不会说这是必要的坏习惯。在这个对与错的有限示例中,这似乎有点不寻常。如果您需要对属性进行约束(例如X <10

答案 1 :(得分:0)

我们有很多选项可以关闭spring-boot应用程序:

关闭其余端点-在您的application.properties中添加以下属性,并在请求curl -X POST localhost:port/actuator/shutdown之后触发

management.endpoints.web.exposure.include=*  
management.endpoint.shutdown.enabled=true  
endpoints.shutdown.enabled=true

您还可以调用合适的方法来关闭应用程序:

  • 通过在close()对象上调用方法ConfigurableApplicationContext(它将关闭应用程序上下文)
  • 通过将退出代码传递给方法SpringApplication.exit(ctx, () -> 0);

请查看this文章以了解更多详细信息。