1.声明
当前内容主要为本人学习和复习用,主要为解决测试中发现当前的timer不执行的问题
主要解决路径:
- 手动配置异步job执行器
- 开启异步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.测试
测试成功,完美使用定时器任务