JAVAWEB开发之工作流详解(一)——Activiti的环境搭建、插件安装、核心API
工作流的概念
工作流管理系统(Workflow Management System, WfMS)是一个软件系统,它完成工作量的定义和管理,并按照在系统中预先定义好的工作流逻辑进行工作流实例的执行。工作流管理系统不是企业的业务系统,而是为企业的业务系统的运行提供了一个软件的支撑环境。
工作流管理联盟(WfMC,Workflow Management Coalition)给出的关于工作流管理系统的定义是:工作流管理系统是一个软件系统,它通过执行经过计算的流程定义去支持一批专门设定的业务流程。工作流管理系统被用来定义、管理、和执行工作流程。
常见的工作流框架
Activiti介绍
工作流引擎
BPMN2.0*
数据库
资源库流程规则表
运行时数据库表
历史数据库表
注意:inst 是instance 实例 的缩写
组织机构表
通用数据表
activiti.cfg.xml
jdbcUrl: 数据库的JDBC URL。
jdbcDriver: 对应不同数据库类型的驱动。
jdbcUsername: 连接数据库的用户名。
jdbcPassword: 连接数据库的密码。
基于JDBC参数配置的数据库连接 会使用默认的MyBatis连接池。 下面的参数可以用来配置连接池(来自MyBatis参数):
jdbcMaxActiveConnections: 连接池中处于被使用状态的连接的最大值。默认为10。jdbcMaxIdleConnections: 连接池中处于空闲状态的连接的最大值。
jdbcMaxCheckoutTime: 连接被取出使用的最长时间,超过时间会被强制回收。 默认为20000(20秒)。
jdbcMaxWaitTime: 这是一个底层配置,让连接池可以在长时间无法获得连接时, 打印一条日志,并重新尝试获取一个连接。(避免因为错误配置导致沉默的操作失败)。 默认为20000(20秒)。
示例数据库配置:
<!-- 配置流程引擎创建工具参数 -->
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!-- 数据库连接配置,默认使用MyBatis连接池 --><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti"/><property name="jdbcDriver" value="com.mysql.jdbc.Driver"/><property name="jdbcUsername" value="root"/><property name="jdbcPassword" value="root"/><!-- databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表false:(默认) 检查数据库的版本和依赖库的版本,如果版本不匹配就抛出异常。true:构建流程引擎时,执行检查,如果需要就执行更新,如果不存在就创建create-drop:构建流程引擎时创建数据库表,关闭流程引擎时就删除这些表--><property name="databaseSchemaUpdate" value="true"/><!-- 是否启动任务调用 --><property name="jobExecutorActivate" value="false"/><!-- 邮件服务器配置 --><property name="mailServerHost" value=""/> <!-- 邮件服务器地址 --><property name="mailServerPort" value=""/> <!-- 邮件服务器端口 --><property name="mailServerUsername" value=""/> <!-- 邮件服务器的用户名 --><property name="mailServerPassword" value=""/>
</bean>
也可以使用第三方的连接池 比如Apache的DBCP连接池
<!-- 方式二:使用别的数据源 -->
<!-- 配置DBCP连接池基本参数 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/activiti"/><property name="username" value="root"/><property name="password" value="root"/>
</bean><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!-- 配置第三方连接池 --><property name="dataSource" ref="dataSource"/><!-- databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表false:(默认) 检查数据库的版本和依赖库的版本,如果版本不匹配就抛出异常。true:构建流程引擎时,执行检查,如果需要就执行更新,如果不存在就创建create-drop:构建流程引擎时创建数据库表,关闭流程引擎时就删除这些表--><property name="databaseSchemaUpdate" value="true"/><!-- 是否启动任务调用 --><property name="jobExecutorActivate" value="false"/><!-- 邮件服务器配置 --><property name="mailServerHost" value=""/> <!-- 邮件服务器地址 --><property name="mailServerPort" value=""/> <!-- 邮件服务器端口 --><property name="mailServerUsername" value=""/> <!-- 邮件服务器的用户名 --><property name="mailServerPassword" value=""/>
</bean>
log4j.properties
日志配置文件
准备环境
activiti5 软件环境
(1)JDK1.6或者更高版本
(2)支持的数据库有:h2, mysql, oracle, postgres, mssql, db2等。
(3)支持activiti5运行的jar包
(4)开发环境为Eclipse3.7或者以上版本,myeclipse为8.6版本
相关资源下载
1)JDK可以到sun的官网下载
http://www.oracle.com/technetwork/java/javase/downloads/index.html
2)数据库,例如:mysql可以在官网上下载。
http://www.mysql.com
3)activiti也可以到Activiti官方网站下载得到。
http://activiti.org/download.html
4)Eclipse3.7或者MyEclipse8.6也可以到相应的网站上获得下载。
安装流程设计器(eclipse插件)
在有网络的情况下,安装流程设计器步骤如下:
(1)打开 Help -> Install New Software
配置新装插件的地址和名称
(3)然后填入下列字段
Name: Activiti BPMN 2.0 designer
Location: http://activiti.org/designer/update/
如图所示:
在Detail部分记得选中 "Contact all updates sites.." , 因为它会检查所有当前安装所需要的插件并可以被Eclipse下载.
(6)安装完以后,点击新建工程new->Other…打开面板,如果看到下图内容:
流程设计器的使用说明
所在完成以上配置后,会由我们自己来管理流程图片。在发布流程时把流程规则文件和流程图片一起上传就行了。
准备Activiti5开发环境
添加Activiti5的jar包
在activiti-5.16.1->wars目录下是一些示例项目,解压activiti-rest项目,导入activiti-rest目录中WEB-INF\lib下所有包。添加到classpath中。
由于我使用的是Mysql数据库,Mysql数据库的链接驱动Activiti官方包中并没有提供,需要导入。手动导入mysql-connector-java.jar,添加到classpath
初始化数据库
方式一:使用Activiti提供的建表语句
方式二:使用Activiti的自动建表功能
/*** 使用框架提供的自动建表功能(不提供配置文件)*/
@Test
public void testDb1() {// 创建Activiti流程引擎配置对象ProcessEngineConfiguration cfg = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();// 配置数据库驱动cfg.setJdbcDriver("com.mysql.jdbc.Driver");// 配置数据库连接cfg.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?createDatabaseIfNotExist=true");// 配置用户名cfg.setJdbcUsername("root");// 配置数据库密码cfg.setJdbcPassword("root");/*** 设置自动建表*/cfg.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);// 根据引擎配置对象创建流程引擎ProcessEngine processEngine = cfg.buildProcessEngine();
}
在Activiti中,在创建核心的流程引擎对象时会自动建表。如果程序正常执行,mysql会自动建库,然后创建23张表。
(2)使用指定的配置文件
在Activiti5的官方示例中并没有现成的配置文件,所以先得找到activiti-rest\WEB-INF\classes下有:
1.activiti-context.xml : 一个类似spring结构的配置文件,清空内容后改名为activiti.cfg.xml,用来做流程引擎的相关配置。按照上面代码配置ProcessEngineConfiguration对象,主要定义数据库的连接配置和建表策略,配置文件代码如下:
<!-- 配置流程引擎配置对象 -->
<bean id="processEngineConfiguration"class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><property name="jdbcDriver" value="com.mysql.jdbc.Driver" /><property name="jdbcUrl" value="jdbc:mysql:///activiti" /><property name="jdbcUsername" value="root" /><property name="jdbcPassword" value="root" /><property name="databaseSchemaUpdate" value="true" />
</bean>
Java代码如下:
/*** 使用框架提供的自动建表功能(使用配置文件)--可以从框架提供的例子中获取*/
@Test
public void testDb2() {String resource = "activiti-context.xml";// 配置文件名称String beanName = "processEngineConfiguration";// 配置id值ProcessEngineConfiguration conf = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource,beanName);ProcessEngine processEngine = conf.buildProcessEngine();
}
createProcessEngineConfigurationFromResource的参数值为我们添加的配置文件activiti.cfg.xml的名称,执行java代码,流程引擎对象创建成功运行后数据库会自动建表。
log4j.properties 日志配置文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ###log4j.rootLogger=info, stdout
把两个文件放入resource目录下即可。
注意:数据库编码要指定为utf8
(3)使用配置文件(使用默认配置)
<!-- 配置流程引擎配置对象 -->
<bean id="processEngineConfiguration"class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><property name="jdbcDriver" value="com.mysql.jdbc.Driver" /><property name="jdbcUrl" value="jdbc:mysql:///activiti" /><property name="jdbcUsername" value="root" /><property name="jdbcPassword" value="root" /><property name="databaseSchemaUpdate" value="true" />
</bean><!-- 配置一个流程引擎工程bean,用于创建流程引擎对象 -->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"><property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
获取流程引擎的代码:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
核心API
ProcessEngine
RepositoryService repositoryService = processEngine.getRepositoryService();
(4)可以产生RuntimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
(5)可以产生TaskService
TaskService taskService = processEngine.getTaskService();
各个Service的作用:
RepositoryService
是Activiti的仓库服务类。所谓的仓库指流程定义文档的两个文件:bpmn文件和流程图片。
RepositoryService repositoryService = processEngine.getRepositoryService();
(2)可以产生DeploymentBuilder,用来定义流程部署的相关参数。
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
(3)删除流程定义
repositoryService.deleteDeployment(deploymentId);
RuntimeService
是Activiti的流程执行服务类。可以从这个服务类中获取很多关于流程执行相关的信息。
TaskService
是activiti的任务服务类。可以从这个类中获取任务的信息。
ProcessDefinition
流程定义类。可以从这里获得资源文件等。
ProcessInstance
代表流程定义的执行实例。例如企业某员工请了一周的假期,那么他就必须发出一个流程实例的申请。一个流程实例包括了所有的运动节点。我们可以利用这个对象来了解当前流程实例的进度信息。
从源代码中可以看出ProcessInstance就是Execution的子接口。也可以说ProcessInstance就是Execution。但是在实际意义上是有所区别的:
Execution
JAVAWEB开发之工作流详解(一)——Activiti的环境搭建、插件安装、核心API相关推荐
- JAVAWEB开发之工作流详解(二)——Activiti核心API的使用(流程定义和流程实例的管理、流程变量、监听器...)以及与Spring的集成
管理流程定义 设计流程定义文档 bpmn文件 设置方式可以直接使用插件图形化界面进行设置 为某任务节点指定任务执行者 保存后的BPMN文件可以使用XML编辑器打开 BPMN 2.0根节点是defini ...
- kafka详解及集群环境搭建
一.kafka详解 安装包下载地址:https://download.csdn.net/download/weixin_45894220/87020758 1.1Kafka是什么? 1.Kafka是一 ...
- 手动angular2环境搭建_详解.Net Core + Angular2 环境搭建
本文介绍了.Net Core + Angular2 环境搭建,具体如下: 环境搭建: 1)node.js版本>5.0,NPM版本>3.0,TypeScript版本>2.0(全装最新版 ...
- 2W 字详解 Redis 集群环境搭建实践
点击上方 "终端研发部"关注, 星标或置顶一起成长 本文是Redis集群学习的实践总结(基于Redis 6.0+),详细介绍逐步搭建Redis集群环境的过程,并完成集群伸缩的实践. ...
- JavaWeb中filter的详解及应用案例
JavaWeb中filter的详解及应用案例 转载自:http://www.cnblogs.com/vanl/p/5742501.html 一:Filter介绍 Filter可认为是Servlet的一 ...
- 微信小程序开发登录界面mysql_微信小程序 欢迎界面开发的实例详解
微信小程序 欢迎界面 市面上大多数的app都会有一个欢迎界面,下面将演示如何通过微信小程序实现一个欢迎界面. 下面将会按照以下的顺序介绍: 布局的实现 逻辑的实现 样式的实现 1.布局的实现 整个布局 ...
- java web编码详解_java web 开发 编码问题详解
java web 开发 编码问题详解 浏览器 IE/FireFox ------------->Servlet容器-------------------------->显示页面 编码 ...
- 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)
. 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...
- STM32开发 -- 低功耗模式详解(2)
如需转载请注明出处:https://juyou.blog.csdn.net/article/details/98631012 上一篇文章 STM32开发 – 低功耗模式详解(1) 简单的总结了一下低功 ...
最新文章
- 一文读懂:GoogleNet的Inception从v1到v4的演变
- Windows7 apache启动失败的解决方法
- HDU - 2050 折线分割平面(规律题)
- 无法解析的外部符号的几种可能(lib方面的)(还有dll方面的,不在本文中)...
- 使用vue-CLI构建vue工程项目
- 你的第一个Django程序
- 为什么高手离不了Linux系统?我想这就是理由!
- 技校毕业是什么学历_初中毕业上技校学什么专业好
- linux用户管理和文件权限
- 1.Sigar介绍和配置
- python3 使用sorted 实现倒序
- php毕业论文选题系统,基于THINKPHP的毕业论文选题系统的设计
- 邮件签名——html模板
- List集合中根据相同属性的对象合并计算
- 微信公众平台编辑器可收藏、使用模版了
- 数据分析,如何支持管理层决策
- Android 自定义Dialog 里面有EditText控件点击关闭输入法失效的问题
- 微信公众号开发——关键词自动回复
- 苹果CMS电影站新手搭建教程
- 回顾 2022 年 — 回顾 Elastic 这一年