【苍穹开发】后台代码创建调度作业和调度计划原创
7人赞赏了该文章
4,148次浏览
编辑于2021年12月05日 16:21:56
摘要由AI智能服务提供
本文介绍了在业务开发中,除了使用线程类外,通过后台代码在苍穹平台创建调度作业和调度计划的方法。首先,说明了如何创建一次性调度任务,包括定义调度作业执行类和创建任务。其次,详述了如何创建关联调度计划的调度作业,执行周期作业,包括创建调度作业、设置参数、创建调度计划并关联作业,以及设置调度计划的开始时间、结束时间、重复周期等。整个过程涉及多个关键类和API的使用。
在业务开发中,经常需要定时执行某些固定的业务,除了使用线程类,业界还有很多支持配置定时作业、定时任务的定时调度框架。
比如:
Quartz
elastic-job
xxx-job
苍穹平台本身提供定时任务功能,位于系统服务云-系统管理-调度管理模块,具体使用在这里就不一一介绍了,有兴趣可以学习下苍穹平台开发相关内容。
下面讲下,如何通过后台代码创建调度作业和调度计划。
一、创建一次性调度任务,执行后台任务
1、创建调度作业执行类
关键类
kd.bos.schedule.executor.AbstractTask;
import kd.bos.context.RequestContext;
import kd.bos.exception.KDException;
import kd.bos.schedule.executor.AbstractTask;
import java.util.Map;
public class TestTask extends AbstractTask {
@Override
public void execute(RequestContext requestContext, Map<String, Object> map) throws KDException {
//TODO 执行逻辑
}
}
2、创建调度作业,并且创建一次性调度任务
关键类
kd.bos.schedule.api.JobInfo
kd.bos.schedule.executor.JobClient
import kd.bos.schedule.api.JobInfo;
import kd.bos.schedule.api.JobType;
import kd.bos.schedule.executor.JobClient;
import java.util.HashMap;
import java.util.Map;
public class TaskDemo {
private void createOnceJob() {
Map<String, Object> jobParams = new HashMap<>();
jobParams.put("param1", "paramvalue");
JobInfo jobInfo = new JobInfo();
jobInfo.setNumber("jobnumber");
jobInfo.setName("jobname");
jobInfo.setJobType(JobType.BIZ);
//设置传给作业类的参数
jobInfo.setParams(jobParams);
//指定关联的应用
jobInfo.setAppId("appid");
//设置调度作业类
jobInfo.setTaskClassname(TestTask.class.getName());
//是否并行执行
jobInfo.setRunConcurrently(true);
//创建并执行一次性调度任务,不持久化调度作业,前台查询不到,只能看到调度任务
String taskId = JobClient.dispatch(jobInfo);
}
}
二、创建关联调度计划的调度作业,执行周期作业
关键类
kd.bos.schedule.api.JobInfo
kd.bos.schedule.api.PlanInfo
kd.bos.schedule.server.JobDispatcherProxy
1、创建调度作业
2、创建调度计划并关联作业
import kd.bos.schedule.api.JobInfo;
import kd.bos.schedule.api.JobType;
import kd.bos.schedule.api.PlanInfo;
import kd.bos.schedule.api.RepeatModeEnum;
import kd.bos.schedule.executor.JobClient;
import kd.bos.schedule.server.JobDispatcherProxy;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
public class TaskDemo {
private void createScheduleJob() {
JobDispatcherProxy proxy = new JobDispatcherProxy();
//1、创建调度作业
JobInfo jobInfo = new JobInfo();
jobInfo.setNumber("jobnumber");
jobInfo.setName("jobname");
jobInfo.setJobType(JobType.BIZ);
jobInfo.setParams(null);
jobInfo.setAppId("appid");
jobInfo.setTaskClassname(TestTask.class.getName());
jobInfo.setEnable(true);
jobInfo.setRunByUserId(0L);
//创建并持久化调度作业,前台可以看到具体的调度作业,未执行
String jobId = proxy.createJob(jobInfo);
//2、创建调度计划
PlanInfo planInfo = new PlanInfo();
//关联调度作业,jobId为第1步的jobId
planInfo.setJobId((String) jobId);
planInfo.setName("name");
planInfo.setNumber("number");
//设置调度计划开始时间 自定义时间
Calendar startTime = Calendar.getInstance();
planInfo.setStartTime(startTime);
//设置调度计划结束时间 自定义时间
Calendar endTime = Calendar.getInstance();
planInfo.setEndTime(endTime);
//设置调度计划重复周期
planInfo.setRepeatMode(RepeatModeEnum.ByDays);
//设置cron表达式,根据表达式解析重复执行的周期
planInfo.setCronExpression("0 0 12 * * ?");
planInfo.setEnable(true);
//发布调度计划
proxy.createPlan(planInfo);
}
}
以上是使用后台代码创建调度作业和调度计划的全过程。如有建议或不足,请联系指正。
赞 7
7人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读