1、添加Activiti Maven依赖;

    <!-- ==============================activiti=========================== -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.17.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.17.0</version>
</dependency>
<!-- activiti需要log4j日志 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.6</version>
</dependency>

2、Spring集成Activiti;

    <!-- ===================================activiti配置=================================== -->
<!-- activiti配置 -->
<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" />
<property name="asyncExecutorEnabled" value="true" />
<property name="asyncExecutorActivate" 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="formService" factory-bean="processEngine" factory-method="getFormService" />

3、由于使用了log4j,在src/main/resources目录下添加log4j配置文件log4j.properties;

log4j.rootLogger=WARN, 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

4、添加bpmn流程配置文件Interview.bpmn;

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti="http://activiti.org/bpmn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
targetNamespace="Examples"
xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL
http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<process id="Interview" name="某公司2012年实习生招聘流程">
<documentation>招聘工作流程</documentation>
<startEvent id="start" name="实习生招聘启动"/>
<userTask id="bishi" name="笔试" activiti:candidateGroups="人力资源部"/>
<sequenceFlow id="flow1" name="" sourceRef="start" targetRef="bishi"/>
<userTask id="yimian" name="技术一面" activiti:candidateGroups="技术部"/>
<sequenceFlow id="flow2" name="" sourceRef="bishi" targetRef="yimian"/>
<userTask id="ermian" name="技术二面" activiti:candidateGroups="技术部"/>
<sequenceFlow id="flow3" name="" sourceRef="yimian" targetRef="ermian"/>
<userTask id="hrmian" name="HR面" activiti:candidateGroups="人力资源部"/>
<sequenceFlow id="flow4" name="" sourceRef="ermian" targetRef="hrmian"/>
<userTask id="luyong" name="录用,发放Offer" activiti:candidateGroups="人力资源部"/>
<sequenceFlow id="flow5" name="" sourceRef="hrmian" targetRef="luyong"/>
<endEvent id="end" name="实习生招聘结束"/>
<sequenceFlow id="flow6" name="" sourceRef="luyong" targetRef="end"/>
</process>
</definitions>

5、添加Activiti测试类;

package com.coshaho.learn.service.test;

import java.util.List;

import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class ActivitiTest
{
public static void main(String[] args)
{
@SuppressWarnings("resource")
ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"spring.xml"});
ProcessEngine processEngine = (ProcessEngine)ac.getBean("processEngine"); // 发布流程
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment().addClasspathResource("Interview.bpmn").deploy(); // 启动流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();
String processId = runtimeService.startProcessInstanceByKey("Interview").getId();
System.out.println("此次启动的流程实例为:" + processId); // 获取人力资源任务
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("人力资源部").list();
System.out.println("******人力资源部任务列表******");
for (Task task : tasks)
{
if("笔试".equals(task.getName()))
{
System.out.println("张三领取笔试任务:" + task.getId());
taskService.claim(task.getId(), "张三");
}
else if("HR面".equals(task.getName()))
{
System.out.println("李四领取HR面任务:" + task.getId());
taskService.claim(task.getId(), "李四");
}
else
{
System.out.println("王五领取发放Offer任务:" + task.getId());
taskService.claim(task.getId(), "王五");
}
} System.out.println("张三的笔试任务数量:"+taskService.createTaskQuery().taskAssignee("张三").count());
tasks = taskService.createTaskQuery().taskAssignee("张三").list();
for (Task task : tasks)
{
System.out.println("张三处理笔试任务, id:"+task.getId());
taskService.complete(task.getId());
} System.out.println("李四的HR面任务数量:"+taskService.createTaskQuery().taskAssignee("李四").count());
tasks = taskService.createTaskQuery().taskAssignee("李四").list();
for (Task task : tasks)
{
System.out.println("李四处理HR面任务, id:"+task.getId());
taskService.complete(task.getId());
} System.out.println("王五的发放Offer任务数量:"+taskService.createTaskQuery().taskAssignee("王五").count());
tasks = taskService.createTaskQuery().taskAssignee("王五").list();
for (Task task : tasks)
{
System.out.println("王五处理发放Offer任务, id:"+task.getId());
taskService.complete(task.getId());
} tasks = taskService.createTaskQuery().taskCandidateGroup("技术部").list();
System.out.println("******技术部任务列表******");
for (Task task : tasks)
{
if("技术一面".equals(task.getName()))
{
System.out.println("马六领取技术一面任务:" + task.getId());
taskService.claim(task.getId(), "马六");
}
else
{
System.out.println("胜七领取技术二面任务:" + task.getId());
taskService.claim(task.getId(), "胜七");
}
}
System.out.println("马六的技术一面任务数量:"+taskService.createTaskQuery().taskAssignee("马六").count());
tasks = taskService.createTaskQuery().taskAssignee("马六").list();
for (Task task : tasks)
{
System.out.println("马六处理技术一面任务, id:"+task.getId());
taskService.complete(task.getId());
}
System.out.println("胜七的技术二面任务数量:"+taskService.createTaskQuery().taskAssignee("胜七").count());
tasks = taskService.createTaskQuery().taskAssignee("胜七").list();
for (Task task : tasks)
{
System.out.println("胜七处理技术二面任务, id:"+task.getId());
taskService.complete(task.getId());
} HistoryService historyService = processEngine.getHistoryService();
List<HistoricProcessInstance> historicProcessInstanceList = historyService
.createHistoricProcessInstanceQuery().list(); if(null != historicProcessInstanceList && 0 != historicProcessInstanceList.size())
{
for(HistoricProcessInstance hisInstance : historicProcessInstanceList)
{
System.out.println("历史流程, id = "+hisInstance.getId()
+ ", end time = " + hisInstance.getEndTime());
}
}
}
}

6、运行测试类,可得到如下结果。

此次启动的流程实例为:7504
******人力资源部任务列表******
王五领取发放Offer任务:5015
李四领取HR面任务:5023
张三领取笔试任务:7507
张三的笔试任务数量:1
张三处理笔试任务, id:7507
李四的HR面任务数量:1
李四处理HR面任务, id:5023
王五的发放Offer任务数量:1
王五处理发放Offer任务, id:5015
******技术部任务列表******
胜七领取技术二面任务:5020
马六领取技术一面任务:7513
马六的技术一面任务数量:1
马六处理技术一面任务, id:7513
胜七的技术二面任务数量:1
胜七处理技术二面任务, id:5020
历史流程, id = 2501, end time = null
历史流程, id = 4, end time = Sun Dec 27 18:31:14 COT 2015
历史流程, id = 5004, end time = null
历史流程, id = 7504, end time = null

同时,我们可以查看数据库,Activiti引擎自动创建以ACT开头的Activiti业务表。

Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(四)——Activiti集成的更多相关文章

  1. Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)二

    接着上一篇博客<Spring整合MyBatis(Maven+MySQL)一>继续. Spring的开放性和扩张性在J2EE应用领域得到了充分的证明,与其他优秀框架无缝的集成是Spring最 ...

  2. 手动配置三大框架整合:Spring+Struts2+mybatis

    如今主流的项目框架中,数据库持久层有可能不是hibernate,而是mybatis或者ibatis,事实上它们都是一样的,以下我来把环境搭建一下: [导入相关jar包]新建web项目projectms ...

  3. 环信 之 iOS 客户端集成四:集成UI

    在Podfile文件里加入 pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-cocoapods.git' 然后在终端中的 ...

  4. Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一

    MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...

  5. spring+struts2+mybatis

    struts2.2.3 + spring3.1.0 + mybatis3.1.0集成简单demo 项目下载地址:http://download.csdn.net/detail/afgasdg/4171 ...

  6. (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中

    利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目  Dao   (jar)   Service (jar)   Controller (web) ...

  7. 整合Spring+Struts2+Mybatis加spring单元测试等

    前言 自己是在CentOS7的IntelliJ IDEA里开发的,里面中文输入法有问题经常用不了,所以这里用了很多chinglish,希望不要介意: 一:pom依赖 <?xml version= ...

  8. Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例

    日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试>讲了不为和不能两个状态,针对不为,只能自己调整心态了,而对于不能,本文会结合一 ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...

  10. 整合第二次(SSM第一次)------------>spring+struts2+mybatis

    今天我们来讲解一下SSM整合,感觉整合这个比上一篇整合更费时,原因在于自己不太熟悉MyBatis了,下午的时候恶补了一下,看了一下相关的文档和PDF电子书,知识真的是你不用就会忘记的,以后还是不能懈怠 ...

随机推荐

  1. 关于nagios系统下使用shell脚本自定义监控插件的编写

    在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解 Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控.检测功能都是通过各种插件来完成的. 启动Nagios ...

  2. vim配置函数跳转(c/c++)

    暂时草记一下,有时间好好整理 ctags 如果只是查看函数与变量是在哪里定义的,用ctags就可以了. ctrl+]跳到定义的地方,ctrl+t跳回来. 想要像IDE那样在旁边显示函数与变量列表,用t ...

  3. mysql if判断

    select if(SUBSTR('06622200556',1,2)='06',0,1) from t_member_product_adb limit 2 输出结果为:0,0

  4. flask跨域请求

    跨域文件上传的时候,浏览器会自动发起一个 OPTIONS 方法到服务器,现在后台解决前端跨域解决前端跨域请求的问题 客户端发起的这个 OPTIONS 可以说是一个“预请求”,用于探测后续真正需要发起的 ...

  5. UVA 11776 - Oh Your Royal Greediness! - [贪心/模拟]

    题目链接:https://cn.vjudge.net/problem/UVA-11776 题意: 给出数字n(0<=n<=1000),代表有n个农民,接下来有n行,每行两个数字S和E代表这 ...

  6. iOS核心动画の摘记

  7. Docker基本命令与使用 —— Docker容器(一)

    一.容器的基本操作 1. 启动容器 docker run IMAGE [COMMAND] [ARG...] run 在新容器中执行命令 eg: docker run ubuntu echo 'Hell ...

  8. Spring Boot中的自定义start pom

    start pom是springboot中提供的简化企业级开发绝大多数场景的一个工具,利用好strat pom就可以消除相关技术的配置得到自动配置好的Bean. 举个例子,在一般使用中,我们使用基本的 ...

  9. pandas绘图总结

    转自:http://blog.csdn.net/genome_denovo/article/details/78322628 pandas绘图总结 pandas中的绘图函数(更加详细的绘图资料可参考p ...

  10. 修改机器名、IP对arcgis server、portal的影响?

    修改机器名.IP是否对ArcGIS Server .Portal等有影响? 请教赛姐:修改IP对ArcGIS Server .Portal 无影响,不过建议将ArcGIS Server .Portal ...