
# 根据界面预置调度计划
## 一、功能介绍
在大型系统中,对于一些需要重复、定时执行或者耗时比较长的任务经常会被剥离出来单独处理,而随着任务规模与复杂性的上升,任务调度系统也随需而生。这篇文章将介绍如何通过界面配置出一个定时调度计划,通俗易懂。
### 1、关键属性
**调度任务类**:即需要定时执行代码逻辑的类;
**调度作业**:配置任务类的细节,即注入任务类和指定任务类的方法,是一个可执行的工作;
**调度计划**:代表一个调度参数的配置,配置调用调度作业以及触发的计划时间;
**运行日志**:由调度计划和调度作业产生的一次任务记录,用于查看任务执行的情况;
**调度监控**:用于观察调度服务运行的状况;
**主服务器**:是一个计划调度器容器,容器里面可以盛放总舵的调度作业,让容器启动后,里面的每隔调度作业都会根据调度计划按部就班自动去执行;
**执行服务器**:调度计划实际运行的容器。
## 二、业务场景
任务调度可以说是所有系统都必须要依赖的中间系统,**主要负责触发一些需要定时执行的任务。定时任务时解决某一特定时刻去做某件任务的业务场景**。比如,库存计算、人员信息同步、定期报表计算。
## 三、主要操作
### 步骤一:调度任务类
- 入口:**【开发平台】→【搜索表单(sch_taskdefine)】→【调度执行程序】→【新增】**;
- 编写调度任务类(业务逻辑代码),继承kd.bos.schedule.executor.AbstractTask;
- **使用表单(sch_taskdefine)功能,对调度任务类进行描述。这个功能有开发人员配置;**
- 对于调度任务类需要的某些特定参数,可以在表单进行定义参数;
- 对于平台人员,所属应用选择系统应用;对于业务开发,请选择对应类的应用

#### 代码示例
```java
import kd.bos.context.RequestContext;
import kd.bos.exception.KDException;
import kd.bos.logging.Log;
import kd.bos.logging.LogFactory;
import kd.bos.schedule.executor.AbstractTask;
import java.util.Map;
/**
* 我的模拟任务
*
*/
public class MyTask extends AbstractTask {
private static Log log = LogFactory.getLog("kd.bos.schedule.formplugin.tasktest.MyTask");
@Override
public void execute(RequestContext context, Map<String, Object> params) throws KDException {
for(int i=0;i<3;i++){
//主动反馈进度,也可以不反馈
feedbackProgress(i);
//暂停100ms
try {
//do something
log.debug("i:" + i);
Thread.sleep(100);
} catch (InterruptedException e) {
log.error(e.getMessage(),