首页 > 解决方案 > 在 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

            }
        }
    }
}

我已经通过删除无限循环进行了验证,并且应用程序继续工作而不会出现故障。

标签: spring-bootinfinite-loopevent-listener

解决方案


推荐阅读