计划任务.md 5.89 KB
Newer Older
1 2
# 计划任务

3
### 1、任务周期定义
4 5 6 7 8 9 10

![](/assets/task_define.png)

新建一条计划任务后,可点击任务计划修改,打开计划修改页面:

![](/assets/schedule_edit.png)

11 12
计划任务可以定义五种频率,分别是:月、周、日、时、分。

13
* 月:可定义每几个月的第几天(可选择多个,使用逗号隔开)执行,同时可以指定执行的具体时分。
14

15
* 周:可定义每几个周的周几执行,同时可指定执行的具体时分。
16

17
* 日:可定义每几天执行一次,同时可指定执行的具体时分。
18

19
* 时:可定义每几个小时执行一次。
20

21
* 分:可定义每几分钟执行一次。
22

23 24
### 2、任务维护

25 26
可在任务维护主界面进行新增、修改、删除操作。

27 28 29 30
![](/assets/task_maintain.png)

新增一条任务记录之后可以对该任务进行参数配置和权限控制:

31
#### 2.1 任务配置
32

33
点击任务配置,打开任务配置明细弹窗,可在此处添加、删除、修改任务所需参数。                                                                                             ![](/assets/task_parameter.png)
34

35
#### 2.2 权限控制
36

37
点击权限设置,打开权限控制明细弹窗,可在此处对任务权限人进行添加、删除、修改操作:
38 39

角色代码为权限人的代码,角色名称为权限人的名字,起始日期和结束日期控制该人员可对该任务操作的时间。                                         ![](/assets/task_authority.png)
40

41 42
#### 2.3 任务类的编写

43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
想要自定义一个job,必须要继承一个抽象类AbstractJob,然后在`safeExecute()`方法中执行业务代码,示例代码如下:

```java
public class demoJob extends AbstractJob{
    @Autowired
    private xxxService service;//业务类
    @Override
    public void safeExecute(JobExecutionContext jobExecutionContext) throws Exception {
        //map中可以获取上方定义的参数,key为参数名称,value为参数值
        JobDataMap map = jobExecutionContext.getMergedJobDataMap();
        try {
           service.dosomething();
        } catch (Exception e) {
            if (logger.isErrorEnabled()) {
                logger.error(e.getMessage(), e);
            }
            exception = e;
            throw e;
        }
        if (exception != null) {
            setExecutionSummary(exception.getClass().getName() + ":" + exception.getMessage());
        } else {
            setExecutionSummary("执行完成!" );
        }     
67

68 69 70 71 72 73 74 75 76 77 78 79 80 81
    }
    @Override
    public boolean isRefireImmediatelyWhenException() {
        //任务发生异常时候进行的动作
        //false 挂起当前JOB等待处理
        //true 继续执行
        return false;
    }

}
```

注意:

82
* 调用`setExecutionSummary()`方法可以在执行记录中,记录你的业务数据的记录,或者抛出的异常的具体信息。
83

84
* 在上下文中获取JobDataMap可以拿到你在任务配置中定义的参数
85

冯景珉's avatar
冯景珉 committed
86 87 88 89 90 91
### 3、计划任务工作台

#### 3.1 新建任务

1.点击左上角的新建任务按钮,可以进入以下界面创建一个新的任务:

92
![](/assets/job_create.png)
冯景珉's avatar
冯景珉 committed
93 94 95 96 97

此处任务名称必须唯一,在lov中选择对应的任务代码。

2.下拉滚动条,可以看到如下所示的界面:

98
![](/assets/job_create2.png)
冯景珉's avatar
冯景珉 committed
99 100 101 102 103 104 105 106 107 108 109

周期性:表示一个cron任务,可以在计划名称的lov中选定自己定义的一个周期,然后计划任务可以根据任务周期定义功能中的执行频率,以及执行的开始和结束时间,进行执行。

制定时间:选择执行的时间,然后计划任务可以根据选中的执行时间,开始执行。

立即执行:可以直接出发你定义的计划任务。

以上三种方式,在定义时只能选择一种,点击保存后,任务会自动开始进行调度。

注意:

110
* 在集群环境中,请确保各个节点的机器的时间一致,否则会造成job的调度出现问题。
冯景珉's avatar
冯景珉 committed
111

112
* 在集群环境中,请不要用节点外的机器操作job。
113

114
* 在开发环境中,在config.properties中调度器自动启动的状态应该默认设置为false,在正式环境中应该设置为true(设置为true,表示调度器随着服务器启动而启动):
冯景珉's avatar
冯景珉 committed
115 116 117 118 119 120 121

在开发环境中,由于隐藏了调度的启动和关闭按钮,所以如果想打开调度器,必须要手动输入url:/job/scheduler/start,否则你的计划任务将不会执行。

#### 3.2 任务状态

1.任务执行时,状态不同,颜色也不同:

122
![](/assets/job_status.png)
冯景珉's avatar
冯景珉 committed
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137

状态说明:

* 正在执行,颜色显示为绿色。

* 发生异常,颜色显示为红色。

* 任务暂停,颜色显示为橙色。

* 任务完成,颜色显示为灰色。

* 任务阻塞,颜色显示为黑色。

2.想要修改任务的状态,或者删除任务,可以勾选对应的计划任务进行操作:

138 139
![](/assets/job_change_status.png)

140
备注:执行完成的任务无法恢复到执行状态。
冯景珉's avatar
冯景珉 committed
141 142 143 144 145

### 4、执行记录

#### 4.1 查看任务的执行记录

146
![](/assets/job_infomation.png)
冯景珉's avatar
冯景珉 committed
147 148 149 150 151 152 153 154 155 156 157 158

参数说明:

* 任务名称:计划任务名称
* 任务组:计划任务所属组别
* 任务状态:任务完成状态,正常执行完为FINISH,执行出错为FAILED,任务被禁止为VETOED
* 执行概要:任务执行过程中的信息,如执行结果,异常信息等(既setExecutionSummary方法中所设置的值)。
* 上次执行时间:上一次任务预计执行的时间点。
* 计划执行时间:预计完成上一次任务后,根据指定的执行间隔推算的本次任务执行的时间。
* 下次执行时间:预计执行完本次任务后,根据指定的执行间隔推算的下一次执行时间点。
* 实际执行时间:本次任务实际执行的时间点。

159 160 161 162
### 5、后台创建计划任务

#### 5.1 后端直接创建计划任务

163
1.在某些业务模块,可能需要直接在后端业务代码中定义计划任务,那么这个时候,融租易中提供了创建计划任何的接口
164

冯景珉's avatar
冯景珉 committed
165 166