公司新项目打算使用activiti进行,今天首次接触,根据网上示例做了个demo。

一、 准备工作

下载activiti-5.22.0.zip并解压,地址:

http://sqdownd.onlinedown.net/down/10814_20170622161645.zip
<http://sqdownd.onlinedown.net/down/10814_20170622161645.zip>

下载运行所需jar包,地址:

http://download.csdn.net/download/ppingguop/10225533
<http://download.csdn.net/download/ppingguop/10225533>

下载MySQL-5.7.21-winx64下载,地址:


https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-5.5.59.0.msi

<https://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-community-5.5.59.0.msi>

下载MySQL驱动jar包,地址:

http://sf.jb51.net:81/201409/tools/mysql-connector-java(jb51.net).rar
<http://sf.jb51.net:81/201409/tools/mysql-connector-java(jb51.net).rar>

下载Activiti BPMN 2.0 designer,地址:

http://download.csdn.net/download/a825564615/9527761
<http://download.csdn.net/download/a825564615/9527761>

JDK1.8,地址:

自己去官网找吧。。。。

MyEclipse/Eclipse,地址:

同上

二、 安装插件

在${youpath}\MyEclipse 2017 CI\dropins下新建文件夹activiti,并新建activiti.link文件,内容仅写:
path=${youpath}\\MyEclipse 2017CI\\dropins\\activiti\\site

将下载好的Activiti BPMN 2.0 designer解压得到一个jars文件夹和activiti-designer-5.14.1.zip。

将jars文件夹中的jar包全选复制,粘贴进${youpath}\MyEclipse 2017 CI\plugins下。

将activiti-designer-5.14.1.zip解压至${youpath}\MyEclipse 2017 CI\dropins下。



重新启动eclipse/MyEclipse后,再次new工程的时候会出现:



插件安装完成。

三、 新建工程

1、 点击File àNew àotheràActiviti Project,创建一个Activiti工程。

2、
导入jar包,在工作路径下新建文件夹,为lib,将activiti-5.22.0.zip解压后libs中jar包全部复制进工程中的lib文件夹,同时把MySQL的驱动jar包复制进该文件夹。然后全选à右键àBuildPath,不赘述了。



3、 安装MySQL,过程不赘述,详情百度经验:

https://jingyan.baidu.com/article/363872ec2e27076e4ba16fc3.html
<https://jingyan.baidu.com/article/363872ec2e27076e4ba16fc3.html>

四、 初始化环境

初始化数据库环境,

建库命令: create databaseitcast0711activiti default character set utf8;

然后两种方法进行建表,我采用代码进行初始化。

1、在该工程的src/main/java下新建 package为test,在该包下新建JunitTest.java。

复制如下代码并运行:输入你的数据库用户名和密码


package test; importorg.activiti.engine.ProcessEngine;
importorg.activiti.engine.ProcessEngineConfiguration;
importorg.activiti.engine.ProcessEngineConfiguration; importorg.junit.Test;
publicclass JunitTest { /** 使用代码创建工作流需要的23张表 */ @Test publicvoid createTable(){
ProcessEngineConfiguration processEngineConfiguration =
ProcessEngineConfiguration .createStandaloneProcessEngineConfiguration();
processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration
.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("****"); /* * public static final
StringDB_SCHEMA_UPDATE_FALSE = "false"; * 不能自动创建表,需要表存在 public static final
StringDB_SCHEMA_UPDATE_CREATE_DROP * = "create-drop";先删除表再创建表 public static
final String * DB_SCHEMA_UPDATE_TRUE ="true";如果表不存在,自动创建表 */
processEngineConfiguration
.setDatabaseSchemaUpdate(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); //
工作流的核心对象,ProcessEngine对象 ProcessEngine processEngine =
processEngineConfiguration .buildProcessEngine();
System.out.println("processEngine:" + processEngine); } }



2、或采用配置文件的方式生成表。

在该工程的src/test/resources下新建文件,命名为:activiti.cfg.xml

将如下内容copy至该文件:(修改数据库用户名和密码)


<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- ProcessEngineConfigurationprocessEngineConfiguration
=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
//连接数据库的配置 processEngineConfiguration.setJdbcDriver("com.mysql.jdbc.Driver");
processEngineConfiguration.setJdbcUrl("jdbc:mysql://localhost:3306/itcast0711activiti?useUnicode=true&characterEncoding=utf8");
processEngineConfiguration.setJdbcUsername("root");
processEngineConfiguration.setJdbcPassword("130427"); /* public static final
StringDB_SCHEMA_UPDATE_FALSE = "false"; 不能自动创建表,需要表存在 public static final
StringDB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表 public static final
StringDB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表 */
processEngineConfiguration.setDatabaseSchemaUpdate(processEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
--> <bean
id="processEngineConfiguration"class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property> <property
name="jdbcUrl"
value="jdbc:mysql://localhost:3306/itcast0711activiti"></property> <property
name="jdbcUsername" value="root"></property> <property name="jdbcPassword"
value="****"></property> <!-- 没有表创建表 --> <property name="databaseSchemaUpdate"
value="true"></property> </bean> </beans>



同时在JunitTest类中运行:


/** 使用配置文件创建工作流需要的23张表 */ @Test publicvoid creteTable_2() { //
ProcessEngineConfigurationprocessEngineConfiguration = //
ProcessEngineConfiguration
//.createProcessEngineConfigurationFromResource("activiti.cfg.xml"); //
工作流的核心对象,ProcessEngine对象 ProcessEngine processEngine =
ProcessEngineConfiguration .createProcessEngineConfigurationFromResource(
"activiti.cfg.xml").buildProcessEngine(); System.out.println("processEngine:" +
processEngine); }



此时在数据中可看见成功生成的23张表:



五、画流程图

在diagrams下新建一个Activiti Diagram:右击diagrams->new->others->Activiti
Diagram,命名为helloword。如下图:



选中第一个“提交申请”,将Properties窗口中的Main
config中的Assignee改为“张三”,依次将下面两个改为“李四”、“王五。”并保存。如下图:



六、运行DEMO

在该工程的src/main/java下新建package为excute,新建类HelloWorld.java。

将如下代码copy至该类中:


packageexcute; importjava.util.List; importorg.activiti.engine.ProcessEngine;
importorg.activiti.engine.ProcessEngines;
importorg.activiti.engine.repository.Deployment; import
org.activiti.engine.repository.ProcessDefinition;
importorg.activiti.engine.runtime.ProcessInstance;
importorg.activiti.engine.task.Task; importorg.junit.Test; publicclass
HelloWorld { ProcessEngine processEngine =
ProcessEngines.getDefaultProcessEngine(); /**部署流程定义*/ @Test publicvoid
deploymentProcessDefinition(){ Deployment deployment =
processEngine.getRepositoryService()//与流程定义和部署对象相关的Service .createDeployment()
//创建一个部署对象 .name("helloworld入门程序")//添加部署的名称
.addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("diagrams/helloworld.jpg")//从classpath的资源中加载,一次只能加载一个文件
.deploy(); //完成部署 System.out.println("部署ID:"+deployment.getId()); //1
System.out.println("部署名称"+deployment.getName()); //helloworld入门程序 }
/**启动流程实例**/ @Test publicvoid startProcessInstance(){ //流程定义的key String
processDefinitionKey ="helloworld"; ProcessInstance pi =
processEngine.getRuntimeService()//与正在执行 的流程实例和执行对象相关的Service
.startProcessInstanceByKey(processDefinitionKey);
//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:"+pi.getId());
System.out.println("流程定义ID:"+pi.getProcessDefinitionId()); } /**查询当前人的个人任务*/
@Test publicvoid findMyPersonalTask(){ Stringassignee = "李四"; List<Task> list =
processEngine.getTaskService()//与正在执行的任务管理相关的Service .createTaskQuery()//创建任务查询
.taskAssignee(assignee)//指定个人任查询,指定办理人 .list(); if(list!=null &&
list.size()>0){ for(Task task:list){ System.out.println("任务ID:"+task.getId());
System.out.println("任务名称:"+task.getName());
System.out.println("任务的创建时间:"+task.getCreateTime());
System.out.println("任务的办理人:"+task.getAssignee());
System.out.println("流程实例ID:"+task.getProcessInstanceId());
System.out.println("执行对象ID:"+task.getExecutionId());
System.out.println("流程定义ID:"+task.getProcessDefinitionId());
System.out.println("############################################"); } } }
/**完成我的任务*/ @Test publicvoid completeMyPersonalTask(){ //任务ID String taskId =
"1402"; processEngine.getTaskService()//与正在执行的任务管理相关的Service .complete(taskId);
System.out.println("完成任务:任务ID:"+taskId); } }



分别依次执行各个单元测试代码,可看到打印内容。

DEMO结束。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信