有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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;
}

application.yml中的ansitrue时,它将继续,否则,应用程序应该关闭,我们可以在bean创建期间关闭应用程序吗?这是一种好的做法吗?有什么好办法处理这个问题吗


共 (2) 个答案

  1. # 1 楼答案

    如果一个bean抛出一个异常,那么Spring将不会继续,进程将结束

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

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

  2. # 2 楼答案

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

    Shutdown rest endpoint-将以下属性添加到应用程序中。属性并在请求后激发curl -X POST localhost:port/actuator/shutdown

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

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

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

    有关更多详细信息,请查看this文章