spring-boot - 在 ApplicationReadyEvent 中使用无限循环时应用程序意外关闭(关闭 ExecutorService 'applicationTaskExecutor')
问题描述
我正在开发一个 Spring Boot API,我的要求是不断地从另一个 API 获取数据并进一步处理。这应该在容器启动并运行后立即开始。所以我实现了一个 ApplicationReadyEvent 监听器来执行相同的操作。当我们在 ApplicationReadyEvent 中使用无限循环时,容器在启动后不久就会停止并出现以下错误。
SpringContextShutdownHook INFO o.s.s.c.ThreadPoolTaskExecutor Shutting down ExecutorService 'applicationTaskExecutor'
请找到以下代码以供参考。
使用的 Spring Boot 版本是 2.2.2.RELEASE
package org.abc.event.listener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
@Component
public class APIEventListener {
private final Logger LOGGER = LoggerFactory.getLogger(this.getClass());
@EventListener(ApplicationReadyEvent.class)
public void processMMSNotifications () {
LOGGER.info("=================================== Start of Method in APIEventListener ===================================");
for (; ; ) {
try {
// Statements
} catch (Exception e) {
// Statements
}
}
}
}
我已经通过删除无限循环进行了验证,并且应用程序继续工作而不会出现故障。
解决方案
推荐阅读
- java - 尝试在我的组合框上使用 setConverter(),但是如果我把它放在我的初始化函数中,我会得到一个空指针异常
- regex - 如何为手机号码编写正确的正则表达式必须从特定数字或字符开始?MVC
- angular - 当我以 ISO 格式转换日期和时间时,每次我得到 000Z?
- kdb - 编写一个 Q-SQL 查询,将 BA.N 的价格乘以 2,GS.N 乘以 3,MSFT.O 乘以 4,并使用向量条件语句调用列 newPrice
- javascript - 无法在“响应”上执行“json”:使用 setInterval 时已读取正文流
- angular - 在 Angular 8 中,如何通过拖动抽屉的边缘来调整 mat-drawer 的大小?
- ruby-on-rails - 为 Rails 表单输入分配唯一 ID 的最佳实践是什么?
- java - charAt() 之后的双反转(“”)
- javascript - 我需要正则表达式的银行路由号码在 javascript 中以 01 到 12 或 21 到 32 开头
- javascript - nodejs 响应 HTML 文件,其中包含带有 src 属性的脚本标记