flowable边界定时器

阅读数:439 评论数:0

跳转到新版页面

分类

python/Java

正文

一、前言

使用边界计时器,对没有审批的任务提前进行提醒,如果用户借阅了图书,在归还时间前一天的时候,对用户进行提醒。

二、流程设计

在提醒事件上设置开始时间${startTime}

三、事件监听器

自定义监听器,实现FlowableEventListener接口。

@Component
@Slf4j
public class FlowableEventListenerTest implements FlowableEventListener {
    @Override
    public void onEvent(FlowableEvent event) {
        try {
            //FlowableEntityEventImpl 事件
            if (event instanceof FlowableEntityEventImpl) {
                FlowableEntityEventImpl engineEvent = (FlowableEntityEventImpl) event;
                JobEntityImpl job = (JobEntityImpl) engineEvent.getEntity();
                //获取任务详情
                String name = job.getElementName();
                String processInstanceId = job.getProcessInstanceId();

                System.out.println(name);
                System.out.println(processInstanceId);

            } else {
                //其他事件
            }
        } catch (Exception e) {
            log.error("执行事件监听器出错,error{}", e);
        }
    }

    @Override
    public boolean isFailOnException() {
        return false;
    }

    @Override
    public boolean isFireOnTransactionLifecycleEvent() {
        return false;
    }

    @Override
    public String getOnTransaction() {
        return null;
    }
}

四、注册监听器

@Configuration
public class GlobalEventListenerConfig {
    @Autowired
    private RuntimeService runtimeService;

    @PostConstruct
    public void addListener() {
        //第二个参数表示只处理任务执行成功的事件,没有第二个参数则表示处理 FlowableEngineEventType 的所有事件
        runtimeService.addEventListener(new FlowableEventListenerTest(), FlowableEngineEventType.JOB_EXECUTION_SUCCESS);
    }
}

五、测试

1、加载流程

	@Test
    public void createDeploymentTest() {
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("测试定时提醒.bpmn20.xml")
                .deploy();
        System.out.println(deployment.getId());
    }

2、启动流程

	@Test
    public void startOneTimejobProcessDefinition() {
        Map<String, Object> variables = new HashMap<String, Object>();
        //定时任务启动时间
        variables.put("startTime", "2022-06-26T22:40:00");
        //通过流程的key启动实例
        ProcessInstance processInstance =
                runtimeService.startProcessInstanceByKey("oneTimejob-process", variables);
        System.out.println(processInstance.getName());
    }

在定时任务启动时间到来时,如果任务还没有审批,则会触发监听器的逻辑。

 




相关推荐

Flowable是一个采用Java开发的业务流程引擎,通过Flowable流程引擎,我们可以部署BPMN2.0的流程定义(一般为XML文件),通过流程定义创建流程实例,查询和访问流程相关的实例与数据,

1、连接的URL可能需要变更,如下面的方式 jdbc:mysql://localhost/flowable?char

一、数据库表类别 flowable是基于Activiti开发的流程引擎,表名中ACT_就是基于Activiti的,而FLW_开头的,是特定于Flowable Work或Engage的数据库表。

一、配置 <dependency> <groupId>org.flowable</groupId> <artifactId>flowable-spring-boot-starter</

一、使用文件流部署工作流 //resourceName是文件的全名称(包括文件后缀) String resourceName = multipartFile.getOriginalFilename()

一、自定义扩展 标准通常是不同公司(不同观点)大量讨论与妥协的结果。作为阅读BPMN 2.0 XML流程定义的开发者,有时会觉得某些结构或方法十分笨重。Flowable将开发者的感受放在最高优先,因此

一、简介 Flowable-ui.war是一个web应用,有以下几个功能: 1、Flowable IDM 身份管理应用,为所有Flowable UI

一、下载 从官网可以下载到flowable,其中有两个war包:flowable-ui.war和flowable-rest.war。 flowable-ui.wa

一、简介 如果需要人工执行的任务,就需要用到用户任务建模。 二、常用配置 1、执行人Assignments (1)执行人类型: Assignee 代理执行人,一般一个用户。 Candidat

通常我们会需要给任务运行表设置内容,因为默认启动任务或完成任务的操作时有些值为空,但我们需要给我们的字段设置值,我想给form_keys设置值,可以通过以下几种方式: 1、常用情况