一、引入依赖的jar包
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.15.1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.15.1</version>
</dependency>
二、设置Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3310/activiti_5_15" />
<property name="username" value="root" />
<property name="password" value="" />
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
<property name="jobExecutorActivate" value="false" />
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" />
</beans>
三、初始化数据库
初始化的sql脚本在activiti-engine-5.15.1.jar\org\activiti\db\create文件夹中,使用对应于数据库的sql进行建表即可。
四、bpm流程定义文件
testOneUserTask.bpmn20.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="Examples">
<process id="oneTaskProcess" name="The One Task Process" isExecutable="true">
<startEvent id="theStart"></startEvent>
<sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask"></sequenceFlow>
<userTask id="theTask" name="my task"></userTask>
<sequenceFlow id="flow2" sourceRef="theTask" targetRef="theEnd"></sequenceFlow>
<endEvent id="theEnd"></endEvent>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_oneTaskProcess">
<bpmndi:BPMNPlane bpmnElement="oneTaskProcess" id="BPMNPlane_oneTaskProcess">
<bpmndi:BPMNShape bpmnElement="theStart" id="BPMNShape_theStart">
<omgdc:Bounds height="35.0" width="35.0" x="470.0" y="176.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="theTask" id="BPMNShape_theTask">
<omgdc:Bounds height="60.0" width="100.0" x="550.0" y="161.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="theEnd" id="BPMNShape_theEnd">
<omgdc:Bounds height="35.0" width="35.0" x="700.0" y="176.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
<omgdi:waypoint x="505.0" y="193.0"></omgdi:waypoint>
<omgdi:waypoint x="512.0" y="191.0"></omgdi:waypoint>
<omgdi:waypoint x="512.0" y="191.0"></omgdi:waypoint>
<omgdi:waypoint x="550.0" y="191.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
<omgdi:waypoint x="650.0" y="191.0"></omgdi:waypoint>
<omgdi:waypoint x="662.0" y="191.0"></omgdi:waypoint>
<omgdi:waypoint x="662.0" y="191.0"></omgdi:waypoint>
<omgdi:waypoint x="700.0" y="193.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
五、测试代码
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.spring.ProcessEngineFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = "test/bpm")
public class TestBpmController {
@Autowired
private ProcessEngineFactoryBean processEngine;
@Autowired
private RuntimeService runtimeService;
@RequestMapping("/ok")
@ResponseJson
public String returnMessage() {
return "ok";
}
@RequestMapping(value = "/startProcess.do")
@ResponseJson
public String startProcess() {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("oneTaskProcess");
return "启动流程:" + processInstance.getId();
}
@RequestMapping( value="/completeTask/{id}" )
@ResponseJson
public String completeProcess(HttpServletRequest request,HttpServletResponse response,@PathVariable String id){
processEngine.getProcessEngineConfiguration().getTaskService().complete(id);
return "完成任务:" + id;
}
@RequestMapping( value="/signalProcess/{executionId}" )
@ResponseJson
public String signalProcess(HttpServletRequest request,HttpServletResponse response,@PathVariable String executionId){
processEngine.getProcessEngineConfiguration().getRuntimeService().signal(executionId);
return "完成:"+executionId;
}
}
六、使用activiti-explorer
1、下载地址 http://activiti.org/download.html
2、copy to lib
mysql-connector-java-5.1.19.jar
3、修改db.properties
db=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3310/activiti_5_15
jdbc.username=root
jdbc.password=
4、打开浏览器访问http://localhost:8080/activiti-explorer。 使用kermit/kermit登录
5、发布流程
管理->部署包->添加新的部署包->选择一个文件(testOneUserTask.bpmn20.xml)
七、测试
1、浏览器中输入:http://localhost:8080/testAAA/test/bpm/startProcess.do
执行后,将打印processId
2、修改数据库,将流程分配给用户kermit:
update act_hi_procinst set start_user_id_='kermit' where PROC_INST_ID_='39701' limit 1;
3、查看activiti-explorer流程图,如下:
4、完成该人工任务
--获取指定流程的taskId
select id_ from act_ru_task where PROC_INST_ID_='39701'
执行
http://localhost:8080/testAAA/test/bpm/completeTask/{taskId}