Activiti6:解决定时器不执行的问题(定时catching事件的使用)

1.声明

当前内容主要为本人学习和复习用,主要为解决测试中发现当前的timer不执行的问题

主要解决路径:

  1. 手动配置异步job执行器
  2. 开启异步job执行器

通过创建ProcessEngine的时候配置

2.查找可以配置的异步job执行器

在这里插入图片描述
找到异步执行器的子类
在这里插入图片描述
开始配置和使用
在这里插入图片描述
在这里插入图片描述

// 1.采用内存数据库的操作方式
		ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration()
				.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP)
				.setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000").setAsyncExecutorActivate(false)
				.setHistoryLevel(HistoryLevel.FULL)// 开启所有历史数据保存的功能,不开启直接查询显示0
				.setAsyncExecutor(new DefaultAsyncJobExecutor()) // 这里配置定时任务执行器
				.setAsyncExecutorActivate(true) // 开启任务执行器
				.buildProcessEngine();

RepositoryService repositoryService = processEngine.getRepositoryService();
		repositoryService.createDeployment().addClasspathResource("\\test\\TimerCatchEventTest.bpmn").deploy();
		System.out.println("Number of process definitions: " + repositoryService.createProcessDefinitionQuery().count());

		TaskService taskService = processEngine.getTaskService();
		RuntimeService runtimeService = processEngine.getRuntimeService();
		HistoryService historyService = processEngine.getHistoryService();
		ManagementService managementService = processEngine.getManagementService();

		// 这里直接启动两个activiti的工作流实例
		ProcessInstance processInstance1 = runtimeService.startProcessInstanceByKey("TimerCatchEventTest");
		
		// 查看存在的定时job
		List<Job> jobs = managementService.createTimerJobQuery().list();
		System.out.println("当前执行的job任务为:"+jobs); // 显示结果为1
		
		// 这里休眠好像没有看到结果,并且也没有任务,好像没有捕获对应的事件和信号,所以一直等待中
		
		try {
    
    
			Thread.sleep(1000*30);
		} catch (InterruptedException e) {
    
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		List<Task> taskList = taskService.createTaskQuery().list();
		System.out.println("当前执行任务的数量为:"+taskList);
		
		processEngine.close();

3.测试

在这里插入图片描述

测试成功,完美使用定时器任务

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/115412451