本文主要是介绍【青铜打铁篇】Activiti 工作流从入门到入土?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
点击上方“好好学java”,选择“置顶”公众号
重磅资源、干货,第一时间送达
重磅推荐
① 纯福利 | 公众号资源大汇总,一年才一次!
② 重磅!!2018年Java全套入门到进阶学习视频及项目实战
③ 2018年java架构师学习视频教程资源
④ 源码系列!!spring源码深度解析
文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig
欢迎 star !!!
本文由自己原创的多篇博客组成,不足之处,还请多多指正。
一、activiti介绍
Activiti5
是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。
-
官网:
http://www.activiti.org/
-
下载:
http://www.activiti.org/download.html
目前,Activiti5中的5.22版本
是用的最多的一个版本,本次教程也是使用这个版本进行讲解,最新版本到了7.0版本
。
在开始教程之前,我们需要先明确下面的一些概念和知识,可以帮助我们更好的理解工作流的开发。
二、工作流引擎
ProcessEngine
对象,这是Activiti工作的核心
。负责生成流程运行时的各种实例及数据、监控和管理流程的运行。
用百度更为通俗的话来说就是:就是一辆汽车的发动机,就好比一辆汽车,外表做得再漂亮,如果发动机有问题就只是一个摆设。应用系统的弹性就好比引擎转速方面的性能,加速到100 公里需要1 个小时(业务流程发生变动需要进行半年的程序修改)还能叫好车吗?引擎动不动就熄火(程序因为逻辑的问题陷入死循环)的车还敢开吗?
三、BPMN
在Activiti工作流中用到了一个BPMN的文件,主要是用来描述业务流程的基本的符号,利用各个组件能够组成一个业务流程图,整个业务也是根据这个图来走的,其实用xml格式打开,就是一个xml文件
。
下面就是bpmn组件的示意图
四、数据库
在我们进行业务流程开发的时候,是会产生很多的数据的,那么这些数据都是放在哪里呢?
是的,其实就是存放在数据库的。
在Activiti工作流的后台是有数据库的支持的,所有的表都以ACT_开头
,利用这些数据库的表,就能够把整个业务流程的数据保存下来,然后利用这些数据进行不同的业务的开发。
数据库表示意图
下面对这些表做一些基本的解释,这些可以先不看,等看完后面的教程后再回过头来看,你会发现其实很简单的
。
-
资源库流程规则表
1)act_re_deployment 部署信息表
2)act_re_model 流程设计模型部署表
3)act_re_procdef 流程定义数据表
-
运行时数据库表
1)act_ru_execution 运行时流程执行实例表
2)act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
3)act_ru_task 运行时任务节点表
4)act_ru_variable 运行时流程变量数据表
-
历史数据库表
1)act_hi_actinst 历史节点表
2)act_hi_attachment 历史附件表
3)act_hi_comment 历史意见表
4)act_hi_identitylink 历史流程人员表
5)act_hi_detail 历史详情表,提供历史变量的查询
6)act_hi_procinst 历史流程实例表
7)act_hi_taskinst 历史任务实例表
8)act_hi_varinst 历史变量表
-
组织机构表
1)act_id_group 用户组信息表
2)act_id_info 用户扩展信息表
3)act_id_membership 用户与用户组对应信息表
4)act_id_user 用户信息表
这些表用的很少,因为我们一般会自己做一个权限管理,所以不会用activiti自身所带的表。
-
通用数据表
1)act_ge_bytearray 二进制数据表
2)act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录。
这两张表的数据是不能够随意删除的,删除可能会出问题。
五、总结
工作流的概念就先介绍这么多了,更多的去官网查看,下一节将用一个入门的实例
来对工作流进行讲解。
一、前言
在上一节中我们对activiti进行了基本的介绍activiti进行了基本的介绍,同时介绍了基本的概念。
这一节,我将用一个入门程序,介绍如何使用activiti。
二、环境准备
2.1、编译器选择
这里我们使用Idea
进行工作流开发,虽然Idea对于工作流的友好度不是很好,因为会有一些小的bug,但是,Idea对于Java的开发还是非常的好的。
在用Idea开发之前,我们需要在idea中安装bpmn开发的插件。方法如下
打开设置
选择plugins
搜索actiBPM
重启idea,新建文件
如果能够找到下面的创建方法,就代表成功了。
新建后出现下面的编辑页面
到现在,bpmn编辑插件就准备好了。
2.2、其他环境准备
-
JDK:1.8
-
数据库:mysql5.7
-
activiti jar包:使用maven依赖
三、入门程序
3.1、新建maven项目
新建的maven项目目录如下
3.2、添加pom依赖
这里需要的pom依赖有以下几个:junit、druid、mysql、lombok(日志)、activiti
<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.sihai</groupId><artifactId>acitvitiDemo</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!-- druid --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version></dependency><!-- lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.12</version></dependency><!-- logback --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.1.8</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.1.8</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.22</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>5.22.0</version></dependency></dependencies><build><pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></pluginManagement></build>
</project>
3.3、日志配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern></encoder></appender><!--<appender name="permission" class="ch.qos.logback.core.rolling.RollingFileAppender">--><!--<file>${catalina.home}/logs/permission.log</file>--><!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">--><!--<FileNamePattern>${catalina.home}/logs/permission.%d{yyyy-MM-dd}.log.gz</FileNamePattern>--><!--</rollingPolicy>--><!--<layout class="ch.qos.logback.classic.PatternLayout">--><!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>--><!--</layout>--><!--</appender>--><!----><!--<logger name="xxx" level="INFO">--><!--<appender-ref ref="permission"/>--><!--</logger>--><!-- TRACE < DEBUG < INFO < WARN < ERROR --><root level="INFO"><appender-ref ref="STDOUT"/></root></configuration>
3.4、测试实例
下面是添加一个junit测试实例,通过测试生成activiti底层需要的数据库表,总共有25张,如果数据库生成了25张表结构,则说明成功!
/*** @Author ouyangsihai* @Description 生成activiti底层数据库表结构* @Date 16:24 2019/1/26* @Param* @return**/
public class Activiti_01 {/*** @return void* @Author ouyangsihai* @Description //生成数据库表结构* @Date 20:57 2018/12/5* @Param []**/@Testpublic void test_createDatabase() {// 创建流程引擎配置信息对象ProcessEngineConfiguration pec = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();// 设置数据库的类型pec.setDatabaseType("mysql");// 设置创建数据库的方式
// ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE(true);//如果没有数据库表就会创建数据库表,有的话就修改表结构.// ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE(false): 不会创建数据库表// ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP(create-drop): 先创建、再删除.pec.setDatabaseSchemaUpdate("true");// 设置数据库驱动pec.setJdbcDriver("com.mysql.jdbc.Driver");// 设置jdbcURLpec.setJdbcUrl("jdbc:mysql://localhost:3306/activitiTest?useUnicode=true&characterEncoding=UTF-8");// 设置用户名pec.setJdbcUsername("root");// 设置密码pec.setJdbcPassword("root");pec.setJdbcPassword("XXXX");// 构建流程引擎对象ProcessEngine pe = pec.buildProcessEngine(); // 调用访方法才会创建数据表// 调用close方法时,才会删除pe.close();}
}
3.5、运行测试实例
运行上面的测试实例后,将会生成下面的25张表结构。
日志信息
表结构
四、总结
通过上面是入门实例,就将activiti的环境准备好了!
一、前言
在上一节中,通过一个入门程序,把activiti的环境准备好了,这一节,将整合spring,并且部署一个最简单的bpmn流程图。
二、环境准备
这一节的内容在上一节入门程序的基础上进行环境配置,如果需要完整的配置文件,请到上一节查看。
2.1 spring配置
首先,需要添加spring的配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx" xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="ignoreUnresolvablePlaceholders" value="true"/><property name="locations"><list><value>classpath:settings.properties</value></list></property></bean><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"><property name="driverClassName" value="${db.driverClassName}"/><property name="url" value="${db.url}"/><property name="username" value="${db.username}"/><property name="password" value="${db.password}"/><property name="initialSize" value="3"/><property name="minIdle" value="3"/><property name="maxActive" value="20"/><property name="maxWait" value="60000"/><property name="filters" value="stat,wall"/></bean><!-- tx --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><tx:annotation-driven transaction-manager="transactionManager"/><!-- druid --><bean id="stat-filter" class="com.alibaba.druid.filter.stat.StatFilter"><property name="slowSqlMillis" value="3000"/><property name="logSlowSql" value="true"/><property name="mergeSql" value="true"/></bean><bean id="wall-filter" class="com.alibaba.druid.wall.WallFilter"><property name="dbType" value="mysql"/></bean></beans>
2.2 数据库等环境配置文件
然后,添加数据库等环境配置文件
db.driverClassName=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/activitiTest?useUnicode=true&characterEncoding=UTF-8
db.username=root
db.password=root
到目前为止,就把spring的配置环境搭建好了,接下来,我们需要加入activiti的整合环境的配置了。
2.3 spring整合activiti
这一步,我们加入spring整合activiti环境的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 配置流程引擎配置信息对象 --><bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"p:dataSource-ref="dataSource"p:transactionManager-ref="transactionManager"p:databaseSchemaUpdate="true"p:jobExecutorActivate="false"p:databaseType="mysql"p:activityFontName="宋体"p:labelFontName="黑体"p:xmlEncoding="utf-8"/><!-- 配置流程引擎 --><bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"p:processEngineConfiguration-ref="processEngineConfiguration"/><!-- 配置六个服务Bean --><bean id="repositoryService" factory-bean="processEngine"factory-method="getRepositoryService"/><bean id="runtimeService" factory-bean="processEngine"factory-method="getRuntimeService"/><bean id="taskService" factory-bean="processEngine"factory-method="getTaskService"/><bean id="historyService" factory-bean="processEngine"factory-method="getHistoryService"/><bean id="formService" factory-bean="processEngine"factory-method="getFormService"/><bean id="identityService" factory-bean="processEngine"factory-method="getIdentityService"/></beans>
到2.3这一步,spring整合activiti的环境就配置好了,接下来,我们创建一个简单的bpmn文件,然后,做一个简单的测试,部署bpmn文件。
三、部署实例
3.1 绘制
打开idea的bpmn编辑器,绘制一个简单的bpmn文件,如下
注意: 用idea编辑的时候,是不会和eclipse一样会自动的生成png文件
的,这里有两种方式解决。
方式一
用eclipse打开编辑,会自动生成,这个简单,这里就不多说了。
方式二
将bpmn
后缀改为xml
右键xml文件,找到下面的按键
出现下面的界面
右键,选择export to file
生成如下
最后将xml
后缀改为bpmn
3.2 测试
通过上面的介绍,绘制了bpmn文件
和png图片
,下面写一个测试实例,部署流程。
/*** @Author 欧阳思海* @Description 部署* @Date 16:24 2019/1/26* @Param* @return**/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext-core.xml","classpath:applicationContext-activiti.xml"
})
@Slf4j
public class test02_spring {@Autowiredprivate ProcessEngine processEngine;@Autowiredprivate TaskService taskService;@Autowiredprivate RuntimeService runtimeService;@Autowiredprivate HistoryService historyService;/*** @return void* @Author 欧阳思海* @Description 部署流程实例* @Date 16:17 2018/12/19* @Param []**/@Testpublic void testTask() throws Exception {// 1 发布流程InputStream inputStreamBpmn = this.getClass().getResourceAsStream("/bpmn/test_01.xml");InputStream inputStreamPng = this.getClass().getResourceAsStream("/bpmn/test_01.png");processEngine.getRepositoryService().createDeployment().addInputStream("test_01.xml", inputStreamBpmn).addInputStream("test_01.png", inputStreamPng).deploy();ProcessInstance pi = processEngine.getRuntimeService()//.startProcessInstanceByKey("test_01");System.out.println("pid:" + pi.getId());}
}
注意上面的test_01
是你的bpmn文件的id
。
3.3 测试结果
四、总结
这一节通过整合spring,绘制简单的bpmn文件,然后成功部署了bpmn文件。下一节,将讲解activit的API
你「在看」吗?????
????点击「阅读原文」,更多精彩
这篇关于【青铜打铁篇】Activiti 工作流从入门到入土?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!