@Resource(name = "jobTaskExecutor") protected TaskExecutor jobTaskExecutor; @Override public void execute() throws Exception { // 初始化执行数据 String param = XxlJobHelper.getJobParam(); List<T> datas = this.initExecuteData(param); // 执行数据为空则直接返回 if (CollectionUtils.isEmpty(datas)) { return; } // 线程同步工具 CountDownLatch countDownLatch = new CountDownLatch(datas.size()); for (T data : datas) { jobTaskExecutor.execute(new Runnable() { @Override public void run() { try { // 调用定制执行方法 execute(data, param); } catch (Throwable e) { // 获取真正异常信息 if (e.getCause() != null) { e = e.getCause(); } // 记录异常日志 XxlJobHelper.log(e); } finally { // 计数器递减 countDownLatch.countDown(); } } }); } // 等待执行完成 await(countDownLatch);