Activiti:创建activiti工程

一、Activiti下载:

1,Activiti下载地址:https://github.com/Activiti/Activiti/releases

  2,Activiti官方下载地址:http://activiti.org/download.html

  3,activiti-5.22.0.zip目录结构:

 其中:database是数据库脚本,包含创建、删除、升级脚本;

    docs是文档,包含开发文档、使用文档、以及流程文件;

    libs是jar包;

    wars是官方提供的demo;

二、activiti工程示例

 1,准备工作:

  Eclipse安装activiti插件:http://activiti.org/designer/update/

 2,创建activiti工程:

 (1).新建一个activiti项目(名称:activiti):

 (2).在工程activiti根目录下创建lib文件夹(存放jar):

 (3).将activiti-5.22.0\wars\activiti-rest.war中的lib解压出来,拷贝到工程的lib文件夹:

 (4).将mysql数据库驱动jar,拷贝到工程的lib文件夹(因为官方提供的lib中只有h2数据库驱动,没有mysql驱动);

 3,初始化数据库

  初始化数据库:mysql数据库中创建activitidb库(官方提供的脚本路径:activiti-5.22.0\database\create),使用配置文件来创建工作流的25张表;

  方式一:直接在mysql数据库手动执行sql建表语句;

  方式二:使用代码执行:

    /**
* 使用框架提供的自动建表(不提供配置文件)
*/
@Test
public void test1() {
// 创建一个流程引擎配置对象
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
// 设置数据源信息
conf.setJdbcDriver("com.mysql.jdbc.Driver");
conf.setJdbcUrl("jdbc:mysql://localhost:3306/activitidbactivitidb?useUnicode=true&characterEncoding=utf8");
conf.setJdbcUsername("username");
conf.setJdbcPassword("password");
// 设置自动建表
conf.setDatabaseSchemaUpdate("true");
// 创建一个流程引擎对象,在创建流程引擎对象过程中会自动建表
ProcessEngine processEngine = conf.buildProcessEngine();
}

  方式三:使用配置文件(要求配置文件名称必须为activiti-context.xml或者activiti.cfg.xml)配置的信息必须为:

  activiti-context.xml代码:

<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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 配置流程引擎配置对象 -->
<bean id="processEngineConfiguration"
class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activitidb?useUnicode=true&amp;characterEncoding=utf8" />
<property name="jdbcUsername" value="username" />
<property name="jdbcPassword" value="password" />
<!-- 建表策略 -->
<property name="databaseSchemaUpdate" value="true" />
</bean> <!-- 配置一个流程引擎工厂bean,用于创建流程引擎对象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<!-- 通过set方法注入流程引擎配置对象 -->
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
</beans>

   MysqlData.java代码:

/**
* 使用框架提供的自动建表(提供配置文件)---可以从框架提供的例子程序中获取
*/
@Test
public void test2() {
String resource = "activiti-context.xml";// 配置文件名称
String beanName = "processEngineConfiguration";// 配置id值
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource(resource,
beanName);
ProcessEngine processEngine = conf.buildProcessEngine();
}

  log4j.properties代码:

log4j.rootLogger=INFO, CA

# ConsoleAppender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n

  相关代码结构,如下图: 

   执行结果为:

  方式四:使用框架提供的自动建表(使用配置文件)

/**
* 使用框架提供的自动建表(使用配置文件)
*/
@Test
public void test3() {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
}

  注意:import org.junit.Test;报错处理:Eclipse 在项目属性的Libararies界面 ,点“Add library",选择JUnit导入。

  我用的是第三种方式初始化数据库;

 4,创建流程图

 (1).在目录diagrams下创建Activiti Diagram文件HelloWorld.bpmn:

 (2).打开HelloWorld.bpmn,画流程图:

 点击空白处,可以修改流程文件属性:

 点击具体的流程环境,可以进行任务配置:

 可以用xml格式打开流程文件:

 5,部署流程定义

 在目录com/avtixiti/xyzq目录下新建一个HelloWorld.java文件,代码如下:

import java.io.IOException;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.junit.Test;
import common.MysqlData; /**
* ClassName:HelloWorld
* Function: 流程图实例
* Reason: TODO
* Date: 2018年1月11日 下午2:05:09
* @author lizm
* @since JDK 1.6
*
*/
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")
.deploy();//完成部署
System.out.println(deployment.getId());
System.out.println(deployment.getName());
} public static void main(String[] args) throws IOException {
HelloWorld client = new HelloWorld();
client.deploymentProcessDefinition();
}
}

 执行,可以看到控制台,输出:

 对应的数据库中的表(act_re_procdef),生成数据:

 6,启动流程实例

 HelloWorld.java文件增加启动流程实例,代码如下:

import java.io.IOException;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.junit.Test; /**
* ClassName:HelloWorld
* Function: 流程图实例
* Reason: TODO
* Date: 2018年1月11日 下午2:05:09
* @author lizm
* @since JDK 1.6
*
*/
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")
.deploy();//完成部署
System.out.println(deployment.getId());
System.out.println(deployment.getName()); } /*
* 启动流程实例
*/
@Test
public void startProcessInstance(){
//流程定义的key
String processDefinitionKey = "HelloWorld";
ProcessInstance processInstance = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
.startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例,key对应HelloWorld.bpmn文件中的ID的属性值,使用key值启动,默认是按照最新版本的流程定义启动
System.out.println("流程实例ID:"+processInstance.getId());//流程实例ID
System.out.println("流程定义ID:"+processInstance.getProcessDefinitionId());//流程定义ID
} public static void main(String[] args) throws IOException {
HelloWorld client = new HelloWorld();
client.deploymentProcessDefinition();
client.startProcessInstance();
}
}

 控制台输出:

 数据库中表(act_ru_execution),可以看到数据生成:

 7,查询当前人的个人任务

 在HelloWorld.java中增加查询当前人的个人任务,代码如下:

  /*
* 查询当前人的个人任务
*/
@Test
public void findPersonalTask(){
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());
}
}
}

 控制台结果:

 数据库中表(act_ru_task),可以查到任务数据:

 8,完成任务

 在HelloWorld.java中增加完成任务,代码如下:

     /*
* 完成我的任务
*/
@Test
public void completePersonalTask(){
//任务Id
String taskId = "12508";
processEngine.getTaskService()//与正在执行任务相关的Service
.complete(taskId);
System.out.println("完成任务:任务Id:"+taskId); }

 执行出现错误提示:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date

 原因分析:“0000-00-00 00:00:00”在mysql中是作为一个特殊值存在的,但 java.sql.Date 将其视为 不合法的值 格式不正确;

 解决方案:url加上   zeroDateTimeBehavior参数(其中&amp;是&的转义);

 datasource.url=jdbc:mysql://localhost:3306/db?useUnicode=true&amp;characterEncoding=utf8&amp;zeroDateTimeBehavior=convertToNull

注意:如果数据库连接是在xml中配置,需要进行特殊字符转义;

 控制台结果:(后续更新)

 

Activiti:创建activiti工程的更多相关文章

  1. 创建Activiti项目

    1.创建项目 2.导入Activiti的jar包 项目上右击创建lib文件夹 将jar包复制进lib文件夹 3.导入数据库连接jar包 4.使用代码创建Activiti用来存放流程数据的23张表 pa ...

  2. 使用eclipse和maven创建activiti项目基础配置

    项目组最近的项目使用到了activiti工作流,到处查找了一些资料后,初步完成任务.但是我所做的事只是在搭好的环境中调用接口和方法操作,因此自己尝试着也从搭建环境入手,以下是成功实现以后的记录. 实现 ...

  3. Activiti学习——Activiti与Spring集成

    转: Activiti学习——Activiti与Spring集成 与Spring集成 基础准备 目录结构 相关jar包 Activiti的相关jar包 Activiti依赖的相关jar包 Spring ...

  4. Eclipse创建Maven工程报错

    问题 用Eclipse创建maven工程的时候,总是会报错,例如提示: Unable to create project from archetype [org.apache.maven.archet ...

  5. MyEclipse创建Maven工程

    先要在MyEclipse中对Maven进行设置:

  6. Vivado SDK 2014.2 创建新工程后,BSP版本不对的解决办法

    问题描述如下: 1. 使用Vivado SDK 2014.2已经创建了工程,但是此时,hdf文件增加了外设,需要重新创建工程以更新SDK中的外设描述: 2. 使用新的hdf创建工程后,发现system ...

  7. 关于Xcode6创建的工程在Xcode5打开

    Xcode6创建的工程在Xcode5打开- 4.0只显示3.5大小的问题 只需要在工程里添加Default-568h@2x.png,即可以解决

  8. windows下无法创建django工程的问题

    环境:python2.7  django1.7 安装好django后,将C:\Python27\Lib\site-packages\Django-1.7.7-py2.7.egg\django\bin; ...

  9. 在VS2015 RC打开CTP中创建的工程

    VS2015终于出了RC了!小伙伴们快来安装试用吧,地址在这里,还有新的Windows 10开发工具哦,要不然是开发不了Universal Windows App的,安装前记得卸载CTP版本. 新的R ...

随机推荐

  1. CxGrid如何实现导出Excel 功能

    ExportGrid4ToEXCEL  这个老的版本用的,新的版本引用 cxGridExportLink 这个单元 uses  Windows, Messages, SysUtils, Variant ...

  2. centos7 edit hostname

    1.临时修改主机名 hostname 主机名 重新连接shell,就可以,这种方式,只能修改临时的主机名,当重启机器后,主机名称又变回来了. 2.永久修改主机名 hostnamectl set-hos ...

  3. Code Forces 22B Bargaining Table

    B. Bargaining Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  4. R语言中的聚类的使用

    这里的聚类主要用到K-Means和K-Medoide聚类.在进行聚类之前,为了避免不同参数之间量纲不同所造成的影响,先将数据进行(0-1)标准化 # 如参数weight data$weight < ...

  5. greenplum-cc-web4.0监控安装

    简介: 本文是基于greenplum5.7,greenplum-cc-web4.0安装的. 一.安装greenplum监控的数据库以及创建用户(在gpadmin用户下安装) 1.开启greenplum ...

  6. 如何在ubuntu上搭建服务器并且可以使用ftp上传

    参考: 配置ftp:  http://jingyan.baidu.com/article/67508eb4d6c4fd9ccb1ce470.html 配置ftp这个中把 新建 allowed_user ...

  7. LeetCode_Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  8. shell 从文件中读取批量文件名并做命令行操作

    222文件内容: /home/zhangsuosheng/Desktop/9-30/9_30/1bak/1538291162.png /home/zhangsuosheng/Desktop/9-30/ ...

  9. linux伙伴系统接口alloc_page分析1

    在内核中分配内存,最后要通过伙伴系统接口进行实际物理页面的分配,一个重要的接口便是alloc_page.本文介绍下alloc_page的主要流程,各个部分的执行.主要包含正常分配流程,当页面不足的时候 ...

  10. C++ 带有通配符*与?的字符串匹配

    题目:两个字符串,一个是普通字符串,另一个含有*和?通配符,*代表零个到多个任意字符,?代表一个任意字符,通配符可能多次出现.写一个算法,比较两个字符串是否相等. 发现许多公司笔试面试都有这道题目,于 ...