如何关闭spring boot嵌入式服务器

Posted

技术标签:

【中文标题】如何关闭spring boot嵌入式服务器【英文标题】:How to close spring boot embedded server 【发布时间】:2021-05-18 22:49:21 【问题描述】:

我正在开发一个 cron,因为我正在使用 Web 客户端将发布请求发送到休息 api。我不想让嵌入式服务器保持打开状态,因为 cron 需要在几秒钟内完成它的任务。但是当我不使用服务器时:

spring.main.web-application-type=none

它显示错误Connection prematurely closed BEFORE response; nested exception is reactor.netty.http.client.PrematureCloseException: Connection prematurely closed BEFORE response 由于它需要服务器工作,我该怎么做才能在响应后停止服务器。

我试过了

server.shutdown=graceful
spring.lifecycle.timeout-per-shutdown-phase=20s

但它什么也没做(我正在使用 intellij ide)

更新: 我试过了

SpringApplication.exit(context, (ExitCodeGenerator) () -> 0);

但是得到Caused by: java.lang.IllegalStateException: org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@37c7595 has been closed already

【问题讨论】:

【参考方案1】:

这将确保SpringBoot应用程序正确关闭并将资源释放回操作系统,

@Autowired
private ApplicationContext context;

------------------
------------------
int exitCode = SpringApplication.exit(context, (ExitCodeGenerator) () -> 0);
System.exit(exitCode);

original question link

【讨论】:

哦,它正在停止,但出现错误:Caused by: java.lang.IllegalStateException: org.springframework.boot.web.reactive.context.AnnotationConfigReactiveWebServerApplicationContext@37c7595 has been closed already

以上是关于如何关闭spring boot嵌入式服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何在嵌入式 tomcat 服务器上部署 Spring Boot Web 应用程序,来自 Spring Boot 本身

什么时候以及为什么我必须使用 Spring Boot? [关闭]

如何使用带有 gradle 的多个嵌入式服务器运行 spring-boot 集成测试

如何配置Spring Boot Tomcat

如何在 Spring Boot 嵌入式 tomcat 中设置 HTTPS SSL 密码套件首选项

如何知道spring boot中嵌入了哪个tomcat版本