解决测试环境下 xxl-job 执行失败的问题

问题

xxljob在测试环境经常执行失败

报错日志

java.util.concurrent.ExecutionException: java.lang.reflect.InvocationTargetException at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:206) at com.xxl.job.core.thread.JobThread.run(JobThread.java:150) Caused by: java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.xxl.job.core.handler.impl.MethodJobHandler.execute(MethodJobHandler.java:31) at com.xxl.job.core.thread.JobThread$1.call(JobThread.java:143) at com.xxl.job.core.thread.JobThread$1.call(JobThread.java:136) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.lang.Thread.run(Thread.java:750) Caused by: java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@4cc4d42c rejected from java.util.concurrent.ScheduledThreadPoolExecutor@77982189[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 3] at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830) at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:326) at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:533) at com.dpp.web.service.process.DppCrawlingProcessService.scheduleRetry(DppCrawlingProcessService.java:308) at com.dpp.web.service.process.DppCrawlingProcessService.crawlingSpaceStation(DppCrawlingProcessService.java:170) at com.dpp.web.xxljob.DppCrawlingJobHandler.crawlingSpaceStationDataJob(DppCrawlingJobHandler.java:62) ... 9 more

原因

线程数较小

com.dpp.web.service.process.DppCrawlingProcessService.scheduleRetry(DppCrawlingProcessService.java:308)

从上面一段日志可以看出xxljob一直想加入并调用代码中的线程池,但是被拒绝,说明代码中的线程池数量不够,代码中是这么写的

private static final ScheduledExecutorService EXECUTOR = Executors.newScheduledThreadPool(1);

其中,开发环境中执行成功率较高,这可能是因为测试环境的服务器的cpu较小

线程池被关闭了

在代码中将线程池关闭导致xxl-job在访问时无线程可用

解决

增大线程池中的线程数

private static final ScheduledExecutorService EXECUTOR = Executors.newScheduledThreadPool(20);

不关闭线程池

结果

可以看到xxl-job此时的成功率较高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值