方式一:流程图中动态配置如下:
这样通过 taskService.setVariable 来传参实现每个环节的动态时间配置
taskService.setVariable
这样在工作流中ACT_RU_TASK表中DUE_DATE_字段就会有时间数据
方式二:直接写时间,如下:它不能直接写正常的时间日期,无法解析。这个格式相当于一天后延后三个小时,距离格式说明下面有介绍
格式解析
R2/2015-06-04T19:25:16.828696-07:00/P1DT10S
上面的字符串通过"/"分为了三部分即:
重复次数/开始时间/运行间隔
重复次数
- R - 将永远重复
- R1 - 将重复一次
- R231 - 将重复231次。
开始时间
任务第一次运行的时间。如果开始日期时间已经过去,Kala将返回一个错误。
其中"T"用来分割日期和时间,时间后面跟着的"-07:00"表示西七区,注意"-"是连字符,不是减号。
时区默认是0时区,可以用"Z"表示,也可以不写。
对于我国,要使用"+08:00",表示东八区。
上面的字符串表示 2015年6月4日,19点25分16秒828696纳秒,西七区。
运行间隔
运行间隔以"P"开始,和上面一样也是用"T"分割日期和时间,如P1Y2M10DT2H30M15S
- P 开始标记
- 1Y - 一年
- 2M - 两个月
- 10D - 十天
- T - 时间和日期分的割标记
- 2H - 两个小时
- 30M - 三十分钟
- 15S 十五秒钟
例子,注意如果没有年月日,"T"也不能省略
- P1DT1M - 一天一分钟执行一次
- P1W - 一周执行一次
- PT1H - 一小时执行一次
- PT10S - 十秒执行一次
工作流会自动转换代码为Data类型时间格式,如果解析流程图需要格式转换可以用以下代码
private int findH(String dueDate){
int h=0;
try {
javax.xml.datatype.Duration duration=javax.xml.datatype.DatatypeFactory.newInstance().newDuration(dueDate);
h = duration.getHours();
} catch (DatatypeConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return h;
}
方式三:代码直接设置:
每个任务都有一个字段,指示该任务的截止日期。可使用Query API可用于查询在特定日期,之前或之后到期的任务。
(1)查询当前还没过期的任务
List<Task> listTask = taskService.createTaskQuery().taskDueAfter(new Date()).list();
(2)查询当前已过期的任务
List<Task> listTask = taskService.createTaskQuery().taskDueBefore(new Date()).list();
(3)查询某个时间点过期的的任务,例如2019-12-29 16:21:07
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ParsePosition pos = new ParsePosition(0);
List<Task> listTask = taskService.createTaskQuery().taskDueDate(formatter.parse("2021-1-26 16:21:07", pos)).list();
(4)通过代码修改任务的过期时间
taskService.setDueDate("taskId",new Date());
方式四:通过TaskListener的DelegateTask来修改,监听器就不详细说明了。