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. Linux批量杀死进程

    杀死进程在linux中使用kill命令了,我们可以下面来给各位介绍一篇关于Linux下批量杀死进程的例子,希望此例子可以对各位同学带来帮助的哦. 批量杀死包含关键字“php-fpm”的进程. kill ...

  2. node项目部署相关问题

    process.env process.env属性返回一个对象,包含了当前Shell的所有环境变量. 通常的做法是,新建一个环境变量NODE_ENV,用它确定当前所处的开发阶段,生产阶段设为produ ...

  3. Linux at 定时任务

    命令格式:at[参数][时间]  请注意系统时间是UTC 命令功能:在一个指定的时间执行一个指定任务,只能执行一次.假如该时间已过去,那么就放在第二天执行. /var/spool/mail/这里是任务 ...

  4. C#调用C++ DLL的方式

    动态链接库(DLL)是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.可以说在windows操作系统中随处可见,打开主分区盘下的system32.在一些项目中,如果有大量运算或者涉 ...

  5. zabbix监控日志文件

    环境: 操作系统:centos 6.8  ,zabbix软件版本:zabbix 3.0.1 前提条件:zabbix客户端已经配置了主动模式,如何配置主动模式,请参考此文 监控日志keys 首先要了解k ...

  6. Ubuntu 16.04 ORB_SLAM2+ROS+usb_cam+AR

    Ubuntu 16.04 ORB_SLAM2+ROS+usb_cam+AR 参考博文:http://blog.csdn.net/u79501/article/details/68942174 http ...

  7. python 将字符串转换为字典

    在一般的工程处理中,需要将获取的字符串数据转换为字典,这样处理起来会非常方便. 我获取的是json数据: content = {"corpus_no":"64702772 ...

  8. MySQL命令:创建数据库、插入数据

    简介: 学习mysql环境为ubantu,下面记录一些基本的创建数据库和插入数据的口令 打开MySQL 服务并使用 root 登录: --打开 MySQL 服务 sudo service mysql ...

  9. linux:用户及文件权限管理

    学习内容来自实验楼.莫烦python.CSDN 一.Linux 用户管理 1. 查看用户 who am i 或者who mom likes who -a:打印所有能打印的  who -d :打印死掉的 ...

  10. uboot 下更改NAND的分区 fdisk

    uboot 下更改NAND的分区 fdisk 分类: S5PXX(三星)2012-07-01 18:59 8946人阅读 评论(7) 收藏 举报 flash平台cacheandroid三星null 关 ...