Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(四)——Activiti集成
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集成的更多相关文章
- Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)二
接着上一篇博客<Spring整合MyBatis(Maven+MySQL)一>继续. Spring的开放性和扩张性在J2EE应用领域得到了充分的证明,与其他优秀框架无缝的集成是Spring最 ...
- 手动配置三大框架整合:Spring+Struts2+mybatis
如今主流的项目框架中,数据库持久层有可能不是hibernate,而是mybatis或者ibatis,事实上它们都是一样的,以下我来把环境搭建一下: [导入相关jar包]新建web项目projectms ...
- 环信 之 iOS 客户端集成四:集成UI
在Podfile文件里加入 pod 'EaseUI', :git => 'https://github.com/easemob/easeui-ios-cocoapods.git' 然后在终端中的 ...
- Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)一
MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中. 使用这个类库中的类, Spring 将会加载必要的MyBatis工厂类和 session 类. 这个类库 ...
- spring+struts2+mybatis
struts2.2.3 + spring3.1.0 + mybatis3.1.0集成简单demo 项目下载地址:http://download.csdn.net/detail/afgasdg/4171 ...
- (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中
利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目 Dao (jar) Service (jar) Controller (web) ...
- 整合Spring+Struts2+Mybatis加spring单元测试等
前言 自己是在CentOS7的IntelliJ IDEA里开发的,里面中文输入法有问题经常用不了,所以这里用了很多chinglish,希望不要介意: 一:pom依赖 <?xml version= ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(四)单元测试实例
日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(三)代码测试>讲了不为和不能两个状态,针对不为,只能自己调整心态了,而对于不能,本文会结合一 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十四)——SpringMVC和MyBatis整合
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7010363.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十三)--S ...
- 整合第二次(SSM第一次)------------>spring+struts2+mybatis
今天我们来讲解一下SSM整合,感觉整合这个比上一篇整合更费时,原因在于自己不太熟悉MyBatis了,下午的时候恶补了一下,看了一下相关的文档和PDF电子书,知识真的是你不用就会忘记的,以后还是不能懈怠 ...
随机推荐
- CentOS7下Elastic Stack 5.0日志分析系统搭建
原文链接:http://www.2cto.com/net/201612/572296_3.html 在http://localhost:5601下新建索引页面输入“metricbeat-*”,之后ki ...
- 初始react
很久就期待学习react了,惰性,一直都没有去翻阅react的资料,最近抽空,简单的了解了一下react,先记录一下,后续慢慢的学习. 一.ReactJS简介 React 起源于 Facebook 的 ...
- python偏函数的运用
摘要:python的设计核心原则就是简洁——在这种原则的指导下,诞生了lambda表达式和偏函数:二者都让函数调用变得简洁.本文主要为你介绍偏函数的应用. 1.为什么要使用偏函数 如果我们定义了一个函 ...
- ubuntu安装Anaconda2-4.4.0+TensorFlow
1.下载Anaconda 到官网http://continuum.io/downloads下载anaconda. 2.安装anaconda 在终端输入:cd ~/Downloads; b ...
- POJ 2342 - Anniversary party - [树形DP]
题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...
- Oracle管理监控之检查数据库和日常维护数据库
linux系统的系统日志一般位于/var/log目录下.linux的系统日志由一个叫syslog的进程管理的,如下日志都是由syslog服务驱动的. /var/log/ messages:记录linu ...
- 系统之锹sysdig:Linux服务器监控和排障利器
当你需要追踪某个进程产生和接收的系统调用时,首先浮现在你脑海中的是什么?你可能会想到strace,那么你是对的.你会使用什么样的命令行工具来监控原始网络通信呢?如果你想到了tcpdump,你又作出了一 ...
- kubernetes实战(二十):k8s一键部署高可用Prometheus并实现邮件告警
1.基本概念 本次部署使用的是CoreOS的prometheus-operator. 本次部署包含监控etcd集群. 本次部署适用于二进制和kubeadm安装方式. 本次部署适用于k8s v1.10版 ...
- /etc/rc.d/rc.local 自定义开机启动程序
/etc/rc.d/rc.local 用于用户自定义开机启动程序,可以往里写开机要执行的命令或脚本,线上的配置如下: [root@localhost ~]$ cat /etc/rc.d/rc.loca ...
- Intel 设计缺陷背后的原因是什么? | Linux 中国
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79386769 wx_fmt=jpeg& ...