您的位置:首页 > 编程语言 > Java开发

activiti入门实例教程

2018-03-02 18:08 525 查看
公司新项目打算使用activiti进行,今天首次接触,根据网上示例做了个demo。

一、 准备工作

下载activiti-5.22.0.zip并解压,地址:
http://sqdownd.onlinedown.net/down/10814_20170622161645.zip
下载运行所需jar包,地址:
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
下载MySQL驱动jar包,地址:
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
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

四、 初始化环境

初始化数据库环境,
建库命令: 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结束。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息