Activiti详细入门教程

环境:JDK1.8,Eclipse Mars2,activiti-designer-5.18.0

一、eclipse安装activiti5.18插件

1、下载activiti-designer-5.18.0。
2、解压后将jars文件夹下的jar包复制到eclipse 的plugins文件夹
3、eclipse菜单依次操作Help -> Install new software ->add
在这里插入图片描述
4、Name 输入Activiti BPMN2.0
5、点击Archive按钮,选择解压后的activiti-designer-5.18.0.zip文件,然后按提示操作即可。
6、查看安装成功,File ->New ->Activiti
在这里插入图片描述
7、配置默认生成流程图(png文件),菜单依次操作Window->preference->Activiti->Save Actions,勾选 Create process difinition image…
在这里插入图片描述

二、画activiti diagram

1、新建项目MyDemo
在这里插入图片描述
2、新建文件夹bpmn,用于存储流程定义(activiti diagram)
3、eclipse菜单依次操作File -> New ->Other->Activiti->Activiti Diagram
在这里插入图片描述
4、输入流程图文件名MyProcess
5、依次拖入Start Event ,User Task,User Task,End Event
6、选择Sequnce flow,分别点击Start Event ,User Task完成第一个连接,依次连接。
在这里插入图片描述
7、编辑Process,点击空白处,点击Properties即可编辑
在这里插入图片描述
8、id用于启动流程,特别要注意。

三、第一个流程程序

1、下载Activiti6.0
2、解压Activiti6.0后将war文件复制到tomcat 的webapps文件夹下,并启动tomcat
在这里插入图片描述
3、将tomcat 的webapps\activiti-rest\WEB-INF的lib文件夹复制到项目的src文件夹下
在这里插入图片描述
在这里插入图片描述
4、将lib文件夹下所有jar包配置到build path
在这里插入图片描述
5、在src文件夹下新建文件log4j.properties

log4j.rootCategory=INFO, stdout , R  
log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
log4j.appender.stdout.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss }-[apm\:\u65E5\u5FD7] %p %t %c - %m%n  

log4j.appender.file.DatePattern='apm'yyyy-MM-dd'.txt'
  
log4j.appender.R=org.apache.log4j.RollingFileAppender  
log4j.appender.R.File=${catalina.home}/logs/apm.log
  
log4j.appender.R.MaxFileSize=1024KB  
log4j.appender.R.MaxBackupIndex=10  
log4j.appender.R.Threshold = INFO 
log4j.appender.R.layout=org.apache.log4j.PatternLayout  
log4j.appender.R.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss }-[apm\:\u65E5\u5FD7] %p %t %c - %m%n  
  
log4j.logger.org.springframework=INFO  
log4j.logger.org.hibernate=INFO  
log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN  
log4j.logger.com.lagooo.as=INFO  

6、在src文件夹下新建文件activiti.cfg.xml

<?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 -->
	<bean id="processEngineConfiguration"
		class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
		<property name="jdbcUrl" value="jdbc:h2:mem:activiti;db_close_delay=1000" />
		<property name="jdbcDriver" value="org.h2.driver" />
		<property name="jdbcUsername" value="sa" />
		<property name="jdbcPassword" value="" />
		<property name="databaseSchemaUpdate" value="true" />
	</bean>
</beans>

7、新建测试类ActivitiTest

import java.util.HashMap;
import java.util.Map;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.identity.Authentication;
import org.activiti.engine.task.Task;

public class ActivitiTest {
	public static void main(String[] args) {
		 // // 创建流程引擎,获取默认的流程引擎
		 ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
		 // 得到流程存储服务
		 RepositoryService repositoryService = engine.getRepositoryService();
		 // 得到运行时服务
		 RuntimeService runtimeService = engine.getRuntimeService();
		 // 获取流程任务
		 TaskService taskService = engine.getTaskService();
		 // 部署流程文件,文件名与第二节第4步一致。流程更新后,需要重新部署流程文件
		 repositoryService.createDeployment().addClasspathResource("bpmn/MyProcess.bpmn").deploy();
		 // // 开启流程,流程名与流程定义中一致,第二节第8步。
		 runtimeService.startProcessInstanceByKey("myProcess","xxx");
		 // 查询第一个节点的任务并且输出
		 Task task = taskService.createTaskQuery().singleResult();
		 System.out.println("第一个任务完成前,当前任务名称:" + task.getName());
		 //设置请假申请任务的执行人
		 taskService.setAssignee(task.getId(), "zhuzhu");
		 Map<String, Object> taskVariables = new HashMap<String, Object>();
		 taskVariables.put("vacationApproved", "false"); //拒绝了请假
		 taskVariables.put("managerMotivation", "We have a tight deadline!");
		
		 // 完成第一个任务,相当于流程图中的请假申请
		 taskService.complete(task.getId(),taskVariables);
		 // 查询第二个节点的任务并且输出
		 task = taskService.createTaskQuery().singleResult();
		 System.out.println("第二个任务完成前,当前任务名称:" + task.getName());
		 taskService.claim(task.getId(), "chenghong");
		 // 完成第二个任务,相当于流程图中的请假审核(流程结束)
		 taskService.complete(task.getId());
		 task = taskService.createTaskQuery().singleResult();
		 System.out.println("流程结束后,查找任务:" + task);
	}
}

四、与spring mvc整合

1、activiti-rest\WEB-INF\lib文件复制到spring 项目的 lib文件夹
2、删除相同jar包的低版本,不删除将导致冲突,项目不能编译通过
3、在sping-bean.xml文件中增加以下配置,注意dataSource为数据库的bean id

<!--Spring流程引擎配置 -->
	<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
		<property name="dataSource" ref="dataSource" />
		<property name="databaseSchemaUpdate" value="false" />
		<property name="transactionManager" ref="transactionManager" />
	</bean>
	
    <!--Spring流程引擎-->
    <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"/>
4、参照spring mvc 的数据库方式操作流程引擎相关服务

五、流程的任务操作说明

1、流程定义中,设置流程的流向条件
在这里插入图片描述
2、设置任务变量,控制流程的流向

Map<String, Object> taskVariables = new HashMap<String, Object>();
	taskVariables.put("develop_audit", developAudit); // 拒绝了请假	
	taskService.complete(task.getId(), taskVariables);

3、增加审批意见

String processInstancesId = task.getProcessInstanceId();
	Authentication.setAuthenticatedUserId("cmc"); // 添加批注时候的审核人,通常应该从session获取
	taskService.addComment(task.getId(), processInstancesId, "it is not bug");

4、Acitivi获取当前任务

Execution execution = runtimeService.createExecutionQuery()// 创建执行对象查询
					.processInstanceId(proc_inst_id)// 使用流程实例ID查询
					.activityId(act_id)// 当前活动的id,对应bpmn文件中的活动节点的id的属性值
					.singleResult();

			Task task = taskService.createTaskQuery().executionId(execution.getId()).singleResult();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值