1.activiti工作流-helloworld

来源:互联网 发布:手机版数据库 编辑:程序博客网 时间:2024/06/06 13:01

1.下载activiti

http://activiti.org/download.html
打开源码包,进入wars的实例工程,\activiti-5.22.0\wars\WEB-INF\lib,导入activiti-rest目录中WEB-INF\lib下所有包。添加到classpath中。

由于我们使用的是Mysql数据库,Mysql数据库的链接驱动Activiti官方包中并没有提供,需要我们自己导入。手动导入mysql-connector-java.jar,添加到classpath下。

2.搭建环境

流程设计器:http://download.csdn.net/detail/qq_31776219/9858078
把压缩包中的内容放入myeclipse根目录的dropins文件夹下
修改activiti.link的目录为你的实际目录

3.helloworld前期准备

安装完上述,即可创建activiti project
这里写图片描述

设置当保存流程时,自动创建流程图
这里写图片描述

拷贝两个配置文件:activiti-context.xml 、 log4j.properties 日志配置文件
http://download.csdn.net/detail/qq_31776219/9858081
把两个文件放入resource目录下即可。

两种方式建立工作流所需的23张表

package junit;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngineConfiguration;import org.junit.Test;public class TestActiviti {    /**使用代码创建工作流需要的23张表*/    @Test    public void 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("root");        /**            public static final String DB_SCHEMA_UPDATE_FALSE = "false";不能自动创建表,需要表存在            public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";先删除表再创建表            public static final String DB_SCHEMA_UPDATE_TRUE = "true";如果表不存在,自动创建表         */        processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);        //工作流的核心对象,ProcessEnginee对象        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();        System.out.println("processEngine:"+processEngine);    }    /**使用配置文件创建工作流需要的23张表*/    @Test    public void createTable_2(){//      ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml");//      //工作流的核心对象,ProcessEnginee对象//      ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();        ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml")   //                                    .buildProcessEngine();        System.out.println("processEngine:"+processEngine);    }}

这里写图片描述

这里写图片描述

在右边工具栏找到start、usertask、end
画开始到任务到结束,用sequenceflow连线
name表示流程名称,assignee表示审批的人

package a_helloworld;import java.util.List;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;import org.activiti.engine.repository.Deployment;import org.activiti.engine.runtime.ProcessInstance;import org.activiti.engine.task.Task;import org.junit.Test;public class HelloWorld {    ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();    /**部署流程定义*/    @Test    public void deploymentProcessDefinition(){        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service                        .createDeployment()//创建一个部署对象                        .name("helloworld入门程序")//添加部署的名称                        .addClasspathResource("diagrams/helloworld.bpmn")//从classpath的资源中加载,一次只能加载一个文件                        .addClasspathResource("diagrams/helloworld.png")//从classpath的资源中加载,一次只能加载一个文件                        .deploy();//完成部署        System.out.println("部署ID:"+deployment.getId());//1        System.out.println("部署名称:"+deployment.getName());//helloworld入门程序      }    /**启动流程实例*/    @Test    public void startProcessInstance(){        //流程定义的key        String processDefinitionKey = "myProcess";        ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service                        .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动        System.out.println("流程实例ID:"+pi.getId());//流程实例ID    101        System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID   helloworld:1:4    }    /**查询当前人的个人任务*/    @Test    public void findMyPersonalTask(){        String assignee = "王五";        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    public void completeMyPersonalTask(){        //任务ID        String taskId = "1002";        processEngine.getTaskService()//与正在执行的任务管理相关的Service                    .complete(taskId);        System.out.println("完成任务:任务ID:"+taskId);    }}

附:
activiti.cfg.xml(activiti的配置文件)
Activiti核心配置文件,配置流程引擎创建工具的基本参数和数据库连接池参数。
定义数据库配置参数:
jdbcUrl: 数据库的JDBC URL。
jdbcDriver: 对应不同数据库类型的驱动。
jdbcUsername: 连接数据库的用户名。
jdbcPassword: 连接数据库的密码。
基于JDBC参数配置的数据库连接 会使用默认的MyBatis连接池。 下面的参数可以用来配置连接池(来自MyBatis参数):
jdbcMaxActiveConnections: 连接池中处于被使用状态的连接的最大值。默认为10。
jdbcMaxIdleConnections: 连接池中处于空闲状态的连接的最大值。
jdbcMaxCheckoutTime: 连接被取出使用的最长时间,超过时间会被强制回收。 默认为20000(20秒)。
jdbcMaxWaitTime: 这是一个底层配置,让连接池可以在长时间无法获得连接时, 打印一条日志,并重新尝试获取一个连接。(避免因为错误配置导致沉默的操作失败)。 默认为20000(20秒)。

原创粉丝点击