公司新项目打算使用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至该文件:(修改数据库用户名和密码)
同时在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改为“张三”,依次将下面两个改为“李四”、“王五。”并保存。如下图:
在该工程的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 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结束。