Activity工作流(一):环境搭建
创始人
2025-05-30 06:28:37

1. 环境搭建

开发环境: activiti 5.22.0 jdk 1.8 mysql 5.6 tomcat 8.5

注意,activiti需要在数据库里创建表,可以在官网下载源码安装包,里面有数据库的表。或者通过java代码自动创建表。所以1.1和1.2节中的方法二选一即可。

1.1 下载源码包

https://www.activiti.org/download-links
在这里插入图片描述

本教程使用的是5.22.0版本,解压后如下:
在这里插入图片描述

在database\create文件夹下有各种版本数据库使用的创建数据库的sql语句。5.22.0版本里有25张基础表。此处使用mysql5.6数据库,新建一个数据库,运行如下文件
在这里插入图片描述

运行后得到25张表:

在这里插入图片描述

数据库表说明:
在这里插入图片描述

1.2 通过java代码创建表

引入依赖的jar

junitjunit4.12org.activitiactiviti-bpmn-converter5.22.0org.activitiactiviti-bpmn-model5.22.0org.activitiactiviti-image-generator5.22.0org.activitiactiviti-process-validation5.22.0org.slf4jslf4j-log4j121.6.1org.slf4jslf4j-api1.6.1mysqlmysql-connector-java5.1.44commons-dbcpcommons-dbcp1.4org.activitiactiviti-root5.22.0org.activitiactiviti-spring5.22.0

在resources目录下创建activiti.cfg.xml,配置数据源和默认引擎




其中databaseSchemaUpdate属性允许在进程引擎启动和关闭时设置策略来处理数据库模式。

  1. false
    (默认):当创建流程引擎时,检查数据库模式对库的版本,如果版本不匹配则抛出异常。
  2. true:在构建流程引擎时,执行检查,如果需要,执行模式的更新。如果模式不存在,则创建它。
  3. create-drop:在创建流程引擎时创建模式,并在流程引擎关闭时删除模式。 这里设置成true,运行程序的时候自动生成表。
    activiti底层使用的是mybtais,可以通过log4j查看执行的语句:
#For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
#begin
#for normal test,delete when online
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

测试代码:

@Test
public void createTable() {ProcessEngineConfiguration configuration =ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");//ProcessEngines.getDefaultProcessEngine();ProcessEngine processEngine = configuration.buildProcessEngine();System.out.println(processEngine);
}

1.3 idea安装activiti插件

File->Settings->Plugins 搜索actiBPM,右侧选择Install,安装成功后重启Idea。

在这里插入图片描述

在工程中可以创建 bpmn文件了。bpmn规范会在后续课程中讲解。

在这里插入图片描述

在这里插入图片描述

idea中绘制流程图的时候中文会乱码,在idea安装路径的bin目录下修改配置文件:
在这里插入图片描述

在文件末尾加一句,如图:-Dfile.encoding=UTF-8
在这里插入图片描述

1.4 示例工程

绘制流程图leave.bpmn:ZhangSan发起请假,LiSi审批请假

部署任务:

@Test
public void addDeployment() {Deployment deployment = processEngine.getRepositoryService() // 与流程定义和部署对象相关的Service.createDeployment() // 创建一个部署对象.name("请假流程") // 设置对应流程的名称.addClasspathResource("leave.bpmn") .deploy(); // 完成部署
}

数据库里已经插入了对应的数据

启动任务:
@Test
public void startProcess() {RuntimeService runtimeService = processEngine.getRuntimeService();//key是act_re_procdef中的KEY_,bpmn的idruntimeService.startProcessInstanceByKey("myProcess_1");
}

查看ZhangSan的任务并提交给下一个操作者。查看李四的任务并处理。(act_ru_task表)

@Test
public void queryZhangSanTask() {String assignee = "ZhangSan";List taskList = processEngine.getTaskService()//获取任务service.createTaskQuery()//创建查询对象.taskAssignee(assignee)//指定查询人.list();for (Task task : taskList) {System.out.println("代办任务ID:" + task.getId());System.out.println("代办任务name:" + task.getName());System.out.println("代办任务创建时间:" + task.getCreateTime());System.out.println("代办任务办理人:" + task.getAssignee());System.out.println("流程实例ID:" + task.getProcessInstanceId());System.out.println("执行对象ID:" + task.getExecutionId());//提交任务到下一个代理人engine.getTaskService().complete(task.getId());}
}
@Test
public void queryLiSiTask() {String assignee = "LiSi";List taskList = processEngine.getTaskService()//获取任务service.createTaskQuery()//创建查询对象.taskAssignee(assignee)//指定查询人.list();for (Task task : taskList) {System.out.println("代办任务ID:" + task.getId());System.out.println("代办任务name:" + task.getName());System.out.println("代办任务创建时间:" + task.getCreateTime());System.out.println("代办任务办理人:" + task.getAssignee());System.out.println("流程实例ID:" + task.getProcessInstanceId());System.out.println("执行对象ID:" + task.getExecutionId());processEngine.getTaskService().complete(task.getId());}
}

查看执行历史act_hi_taskinst表:

@Test
public void viewHistory() {HistoryService historyService = processEngine.getHistoryService();HistoricProcessInstance historicProcessInstance =historyService.createHistoricProcessInstanceQuery().processInstanceId("15001").singleResult();System.out.println("开始时间:" + historicProcessInstance.getStartTime());System.out.println("结束时间:" + historicProcessInstance.getEndTime());
}

相关内容

热门资讯

男子参加公务员遴选,笔试成绩、... (来源:今晚报)转自:今晚报 【男子参加公务员遴选,笔试...
*ST东通:公司股票将于12月... 经济观察网 *ST东通12月22日公告,深圳证券交易所于2025年12月22日作出公司股票终止上市的...
破局!华为发布“超级nova” 2025年的中高端智能手机市场正处于深度调整与激烈竞争的双重漩涡中。各大品牌纷纷堆砌硬件配置,像素数...
中央社会工作部公布志愿服务领域... 转自:新华社中央社会工作部12月22日公布志愿服务领域7个突出问题典型案例,加强警示教育、规范志愿服...
海昌海洋公园:董事会主席、执行... 观点网讯:12月22日晚间,海昌海洋公园公告称,集团于公告当日收到公司董事会主席、执行董事兼行政总裁...