当前位置: 首页 > news >正文

Exception in thread “threadPoolTaskExecutor-1“ java.lang.NullPointerException

在使用异步多线程时报了一个查询线程名称的错误,再次记录下和优化

以下是错误信息

Exception in thread "threadPoolTaskExecutor-1" java.lang.NullPointerExceptionat java.util.HashMap.putMapEntries(HashMap.java:500)at java.util.HashMap.putAll(HashMap.java:784)at java.util.Collections$SynchronizedMap.putAll(Collections.java:2594)at ch.qos.logback.classic.util.LogbackMDCAdapter.setContextMap(LogbackMDCAdapter.java:197)at org.slf4j.MDC.setContextMap(MDC.java:264)at com.juepeiscm.common.traceid.MDCTaskDecorator.lambda$decorate$0(MDCTaskDecorator.java:20)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)

报错的代码,使用定时任务查询一个快递信息

@Override@LogTraceIdpublic void queryExpressOrderRouter() {ExpressOrderInfoFilter expressOrderFilter = new ExpressOrderInfoFilter();// 近一月expressOrderFilter.setDispatchStartTime(DateFormatUtils.format(DateUtils.addDays(new Date(), -30), "yyyy-MM-dd 00:00:00"));expressOrderFilter.setDispatchEndTime(DateFormatUtils.format(DateUtils.addDays(new Date(), 0), "yyyy-MM-dd 23:59:59"));// 状态条件expressOrderFilter.setStatus(0);expressOrderFilter.setSignStatus(0);// 必填数据过滤List<ExpressOrderInfo> expressOrderInfos = this.expressOrderMapper.selectExpressOrderList(expressOrderFilter).stream().filter(t ->StringUtils.isNotBlank(t.getExpressCode())&& StringUtils.isNotBlank(t.getServiceProductCode())&& StringUtils.isNotBlank(t.getMonthlyAccount())&& null != t.getSchedulingReason()&& null != t.getIsInContract()).collect(Collectors.toList());List<ExpressOrderInfo> bsExpressOrderInfo = expressOrderInfos.stream().filter(t -> Constants.BESTQJT.equalsIgnoreCase(t.getCourierCode())).collect(Collectors.toList());if (CollectionUtils.isNotEmpty(bsExpressOrderInfo)) {iExpressDisposeTaskService.disposeBESTQJTExpressOrderRouter(bsExpressOrderInfo);}}
void disposeBESTQJTExpressOrderRouter(List<ExpressOrderInfo> bsExpressOrderInfo);
@LogTraceId@Async("threadPoolTaskExecutor")@Overridepublic void disposeBESTQJTExpressOrderRouter(List<ExpressOrderInfo> bsExpressOrderInfo) {Map<String, ExpressCodingMapping> expressCodingMappingMap = getExpressCodingMappingMapByCompanyCode(Constants.BESTQJT);}

问题就在方法disposeBESTQJTExpressOrderRouter里面,断点到这儿的时候发现获取threadPoolTaskExecutor是空值

开始改造一波,以下是改造后的代码

public void queryExpressOrderRouter() {ExpressOrderInfoFilter expressOrderFilter = new ExpressOrderInfoFilter();// 近一月expressOrderFilter.setDispatchStartTime(DateFormatUtils.format(DateUtils.addDays(new Date(), -30), "yyyy-MM-dd 00:00:00"));expressOrderFilter.setDispatchEndTime(DateFormatUtils.format(DateUtils.addDays(new Date(), 0), "yyyy-MM-dd 23:59:59"));// 状态条件expressOrderFilter.setStatus(0);expressOrderFilter.setSignStatus(0);// 必填数据过滤List<ExpressOrderInfo> expressOrderInfos = this.expressOrderMapper.selectExpressOrderList(expressOrderFilter).stream().filter(t ->StringUtils.isNotBlank(t.getExpressCode())&& StringUtils.isNotBlank(t.getServiceProductCode())&& StringUtils.isNotBlank(t.getMonthlyAccount())&& null != t.getSchedulingReason()&& null != t.getIsInContract()&& StringUtils.isNotBlank(t.getCourierCode())).collect(Collectors.toList());List<ExpressOrderInfo> bsExpressOrderInfo = expressOrderInfos.stream().filter(t -> Constants.BESTQJT.equalsIgnoreCase(t.getCourierCode())).collect(Collectors.toList());if (CollectionUtils.isNotEmpty(bsExpressOrderInfo)) {CompletableFuture.runAsync(() -> {try {iExpressDisposeTaskService.disposeBESTQJTExpressOrderRouter(bsExpressOrderInfo);} catch (Exception e) {log.error("订单物流信息数据异常=", e);}});}}
void disposeBESTQJTExpressOrderRouter(List<ExpressOrderInfo> bsExpressOrderInfo);
public void disposeBESTQJTExpressOrderRouter(List<ExpressOrderInfo> bsExpressOrderInfo) {Map<String, ExpressCodingMapping> expressCodingMappingMap = getExpressCodingMappingMapByCompanyCode(Constants.BESTQJT);}

这里面把异步方式修改了,这样就不会出现以上问题了;核心代码如下

CompletableFuture.runAsync(() -> {try {iExpressDisposeTaskService.disposeBESTQJTExpressOrderRouter(bsExpressOrderInfo);} catch (Exception e) {log.error("订单物流信息数据异常=", e);}});

有兴趣或者有别的见解的伙伴,可以一起留言讨论


http://www.mrgr.cn/news/38987.html

相关文章:

  • 图纸加密软件有哪些?2024好用不踩雷的10款图纸加密软件推荐!
  • 基于Java(Spring+Struts+Hibernate 框架)实现(Web)学生课程管理系统
  • 《北方牧业》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • STM32移植RT-Thread实现DAC功能
  • 红蓝攻防实战技术———实战化运营体系的落地
  • 三十三、领域驱动设计DDD(与传统MVC思想对比加深理解)
  • 泛微E-Mobile 口令硬编码漏洞复现
  • win10如何禁止指定程序运行?4个方法速成,小白必入! 99%的人都会踩的坑!
  • VR视频怎样进行加密和一机一码的使用?--加密(一)
  • 2024 互联网各厂梯队排名!你在第几梯队?
  • Zabbix 7.0 图表中文乱码问题处理步骤
  • 融云携高潜市场出海攻略亮相「2024 拉美中东北非出海峰会」
  • fmql之Linux中断
  • 【linux 多进程并发】linux进程状态与生命周期各阶段转换,进程状态查看分析,助力高性能优化
  • Spring面向对象的设计模式
  • 堆排序-堆排序介绍及在Java如何实现最大堆排序方法
  • 【Kubernetes】常见面试题汇总(四十五)
  • 任务提交:bsub
  • CHI trans简介--prefetch
  • P9241 [蓝桥杯 2023 省 B] 飞机降落