activiti 手动创建定时任务——衍生定时任务

本文介绍了一种在Activiti工作流引擎中手动创建定时任务的方法,通过代码实现灵活的定时流程启动,适用于需要根据实际情况动态计算启动时间的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多时候,我们想像Activiti定时开始事件一样,加入一些自己的定时流程。但定时开始事件有很大的局限性,比如时间、循环次数、循环间隔是必须要指定的,这对于一些根据实际状况,计算时间并启动的流程是无法处理的。

通过一系列的源码分析,最终找到了手动建立Job的方式方法,代码如下:

// 时间计算
Date now = new Date();
// delay为相较当前时间,延时的时间变量
Date target = new Date(now.getTime() + delay * 60 * 1000);
// 时间事件声明
TimerEntity timer = new TimerEntity();
timer.setDuedate(target);
timer.setExclusive(true);
timer.setJobHandlerConfiguration("customProcessKey");// 这里存入需要启动的流程key
timer.setJobHandlerType(TimerStartEventJobHandler.TYPE);
// 保存作业事件
Context.getCommandContext().getJobEntityManager().schedule(timer);
该代码片段的作用,其实仅仅是在act_ru_job表中增加一条记录,但当Activiti配置中,启用Job执行器(代码见下),Activiti流程引擎便会在指定的时间,触发指定的流程。

<property name="jobExecutorActivate" value="true" />
至此,我们可以手动的在代码的控制下,在不确定的时间(程序计算)点,启动任意(指定key即可)的流程,大大方便的流程执行中的自定义性。

Activiti是一个开源的工作流管理框架,它允许你在业务流程中添加任务。手动创建的任务通常通过API、用户界面或者脚本直接插入流程。如果你想要在监听器中获取任务创建时的参数,你需要配置一个合适的事件监听器(如TaskCreatedListener),并在监听器的回调方法中处理。 在Activiti中,你可以这样做: 1. 首先,在任务创建前设置好任务变量并赋予值。这可以是在任务定义的时候直接指定,也可以在任务服务创建任务时动态赋值。 ```java Map<String, Object> variables = new HashMap<>(); variables.put("myVariable", "someValue"); Task task = taskService.createTaskBuilder() .setName("My Task") .setAssignee(userId) .setVariables(variables) // 或者 taskService.saveTask(task); ``` 2. 创建一个实现了`org.activiti.engine.delegate.TaskListener`接口的类,并覆盖`onTaskCreate(TaskEvent event)`方法: ```java public class MyTaskEventListener implements TaskListener { @Override public void onTaskCreate(TaskEvent event) { Task task = event.getTask(); String myVariable = (String) task.getVariable("myVariable"); // 在这里处理或访问myVariable } } ``` 3. 注册这个监听器: ```java processEngineConfiguration.getEventDispatcher().addEventListener(new MyTaskEventListener(), TaskEvent.TASK_CREATED); ``` 当你在监听器中接收到任务创建事件时,`event.getTask()`会返回新创建的任务实例,你可以从中获取之前设置的参数。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值