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
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-image-generator</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-process-validation</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-root</artifactId>
<version>5.22.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.22.0</version>
</dependency>
</dependencies>
在resources目录下创建activiti.cfg.xml,配置数据源和默认引擎
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/activiti2?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="databaseSchemaUpdate" value="true" />
</bean>
其中databaseSchemaUpdate属性允许在进程引擎启动和关闭时设置策略来处理数据库模式。
- false
(默认):当创建流程引擎时,检查数据库模式对库的版本,如果版本不匹配则抛出异常。- true:在构建流程引擎时,执行检查,如果需要,执行模式的更新。如果模式不存在,则创建它。
- 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的id
runtimeService.startProcessInstanceByKey("myProcess_1");
}
查看ZhangSan的任务并提交给下一个操作者。查看李四的任务并处理。(act_ru_task表)文章来源:https://www.toymoban.com/news/detail-426018.html
@Test
public void queryZhangSanTask() {
String assignee = "ZhangSan";
List<Task> 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<Task> 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表:文章来源地址https://www.toymoban.com/news/detail-426018.html
@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());
}
到了这里,关于Activity工作流(一):环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!