先说下我的情况:

若依的不分离版springboot项目,有热部署。

然后我写了个类,专门监听其它服务器推送过来的消息,进行数据库更新操作。

手动重启,一切正常。但是当我修改某个类文件保存后热部署生效,直接自动重启

这个时候就有问题了,当再监听到有消息来的时候,就报错了。。。。

nested exception is java.lang.IllegalStateException: org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@602ec673 has been closed already

这个是我写的类,系统一启动就自动运行

@Component
public class WarnlampAliiotAmqp implements CommandLineRunner{

    private final static Logger logger = LoggerFactory.getLogger(WarnlampAliiotAmqp.class);

    //业务处理异步线程池,线程池参数可以根据您的业务特点调整,或者您也可以用其他异步方式处理接收到的消息。
    private final static ExecutorService executorService = new ThreadPoolExecutor(
        Runtime.getRuntime().availableProcessors(),
        Runtime.getRuntime().availableProcessors() * 2, 60, TimeUnit.SECONDS,
        new LinkedBlockingQueue<>(50000));

    @Override
    public void run(String... args) throws Exception {

                我在run方法了,是用的SpringUtils.getBean(XXX.class);得到业务对象,进行操作

        }

}

网上有说,容器关闭重启,SpringUtils.getBean还是获取以前的容器,所以报错,我真不太懂,希望大神们指点一下

Logo

快速构建 Web 应用程序

更多推荐