问题:Illegal access: this web application instance has been stopped already. Could not load 分析...

问题描述

此问题出现在tomcat停止时,大概想想就知道,tomcat卸载了应用,但是现在有一些线程没有停止,继续执行代码,执行代码就需要加载类,加载类就要调用WebAppClassLoader,可是此时web应用已经卸载了,加载类的需求不会被满足,此时只能抛出异常,后面一般还跟着一句:The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access,也就是说打印的堆栈跟踪,一方面是为了调试目的,同时也尝试终止抛异常的线程。

解决办法

如果没有代码洁癖,这问题可以不理,一般不会有问题。 如果想解决掉,简单粗暴一些,写一个spring context的停止事件监听,sleep 10秒

@Configuration
public class ApplicationEventListener implements ApplicationListener{
    private static Logger logger = LoggerFactory.getLogger(ApplicationEventListener.class);
    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if(event instanceof ContextClosedEvent){
            logger.info("ContextClosedEvent...");
            try {
                Thread.sleep(10000L);
            } catch (Exception e){
                logger.error("thread sleep err",e);
            }
        }
    }
}

tomcat在卸载web应用之前,肯定需要首先销毁spring容器,销毁时睡眠10秒。

转载于:https://my.oschina.net/wuxiaofei/blog/3100931

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值