如何在spring boot启动期间关闭应用程序
Posted
技术标签:
【中文标题】如何在spring boot启动期间关闭应用程序【英文标题】:how to close the application during startup in spring boot 【发布时间】:2019-04-11 19:42:29 【问题描述】:我有一个关于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
中的ansi
是true
时,它继续,否则,应用程序应该关闭,我们可以在创建bean的过程中关闭应用程序吗?这是一个好习惯吗?有什么好的方法可以处理吗?
【问题讨论】:
你可能想检查一下:***.com/questions/22944144/… 【参考方案1】:我们有很多选项可以关闭 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
你也可以调用合适的方法来关闭应用程序:
通过在ConfigurableApplicationContext
对象上调用方法close()
(它将关闭应用程序上下文)
通过将退出代码传递给方法SpringApplication.exit(ctx, () -> 0);
请查看this 文章了解更多详情。
【讨论】:
【参考方案2】:如果 bean 抛出异常,则 Spring 将不会继续,进程将结束。
if(ansi.equals("true"))
Ansi ansiObj = new Ansi();
ansiObj.ansi = ansi;
return ansiObj;
else
throw new IllegalArgumentException("reason");
我不能说我曾经有过它的用例,但我不会说这是必要的坏习惯。在这个有限的真假例子中,似乎有点不寻常。如果您需要对属性进行约束,例如X
【讨论】:
以上是关于如何在spring boot启动期间关闭应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在spring-boot启动期间tomcat数据源不检查有效连接?
如何在不启动 HikariPool 关闭的情况下使用 Hikari 数据源运行 Spring Boot 应用程序
如何让世界各地的每个人都可以访问在我的计算机上启动的 Spring Boot 应用程序? [关闭]