一 调度模式分类
1.1 调度模式
1.单个任务:一个任务实例便可完成
a)单机单任务:单机模式下任何路由模式都只有一个实例执行
b)集群单任务:由路由策略(广播模式除外)选择其中一个实例完成
2.集群部署:每个实例都同时执行一部分数据。分片方式:取模分片,范围分片
a)单机多任务分片:单机模式下,创建同类型任务多个任务计划,手工分片数据作为参数
b)集群任务分片:只有广播模式会通知所有实例都会运行,每个节点取模执行任务
注意:单机模式:只启动一个任务执行器实例,修改路由模式即便是广播模式依然只有一个实例运行job
集群模式:启动多个任务实例,这里可以把每个实例的端口号都改为不同,可以看到同一个任务类有多个机器。除了广播模式,其他模式都只会选择机器列表中的一个执行job。
1.2 案例说明
假设有5个地市
,每个地市有10个订单
执行,总共50个订单
,而每个订单中又有一个字段体现出地市信息。
二 案例模式1单机模式
2.1 思路
单机单任务:单机模式下任何路由模式都只有一个实例执行
2.1 编写代码
package com.ljf.xxl.job.task;import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;import java.util.*;import static com.xxl.job.core.biz.model.ReturnT.FAIL_CODE;/*** @ClassName: SingleTask* @Description: TODO* @Author: admin* @Date: 2023/10/13 20:52:26 * @Version: V1.0**/
@Component
public class SingleTask {private Logger log = LoggerFactory.getLogger( SingleTask.class);@XxlJob(value = "singleTasks", init = "init", destroy = "destroy")public ReturnT<String> execute(String cities) {String param = XxlJobHelper.getJobParam();System.out.println("v2 param=" + param);XxlJobHelper.log("v2 param=" + param);System.out.println("获取cities 参数:==================="+cities);if (StringUtils.isEmpty(param)) {return new ReturnT(FAIL_CODE, "latnIds不能为空");}//处理if (param != null && param.length() > 0) {String cityArray[] = param.split(",");for (int k = 0; k < cityArray.length; k++) {// Integer cityId = Integer.parseInt(cityArray[k]);String cityId= cityArray[k];List<String> infoList = dbMap.get(cityId);infoList.stream().forEach((x) -> {// System.out.println("【"+Thread.currentThread().getName()+"】执行【{"+cityId+"}】,任务内容为:{"+x+"}" );log.info("【"+Thread.currentThread().getName()+"】执行【{"+cityId+"}】,任务内容为:{"+x+"}");// XxlJobHelper.log("【"+Thread.currentThread().getName()+"】执行【{"+cityId+"}】,任务内容为:{"+x+"}");});}}return ReturnT.SUCCESS;}private void init() {log.info("init 方法调用成功");}private void destroy() {log.info("destroy 方法调用成功");}static List<String> cityNoList=null;static int cityTaskNum=0;//数据库static Map<String,List<String>> dbMap=null;static {dbMap=new HashMap<>();//城市编号cityNoList= Arrays.asList("010","0755","0371","0373","0375");//任务数cityTaskNum=10;for(int k=0;k<cityNoList.size();k++){List<String> tasksList = new ArrayList<>();for(int m=1;m<=cityTaskNum;m++){tasksList.add("执行任务"+m);}dbMap.put(cityNoList.get(k)+"",tasksList);}}}
2.2 配置单机模式
2.2.1 配置执行器
2.2.2 配置调度任务
1.选择任务管理
2.进行任务的配置
2.3 查看效果
所有的任务都指在一个任务实例中执行。