activiti入门
-
简介
工作流(workfolw),简单概念就是用于流程审批,是计算机自动化完成工作流的审批操作;它主要解决的是"使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的任务,从而实现某个预期的业务目标,或者促使此目标的实现" -
Activiti开发流程
-
画流程定义模型: 遵守BPMN的流程规范,使用BPMN的流程定义工具,通过 流程符号 把整个业务流程定义出来,可以将流程 定义文件字节流保存到模型数据表中(Model).
-
部署流程定义(java类,请假定义类): 加载画好的流程定义文件,将它转换成流程定义数据(ProcessDefinition),保存到流程定义数据表中.
-
启动流程(Java对象,请假定义实例,针对每个提交申请,启动一个流程实例): 生成流程实例数据(ProcessInstance),生成第1节点任务数据(Task);
-
处理人审批流程节点任务: 完成任务审批,生成审批结果,生成下一节点任务数据.
-
-
环境准备
-
springboot 2.5
-
Activiti 7.1.0.M6
-
Mysql 5.7
-
JDK 1.8
-
maven依赖:
-
org.activiti
activiti-engine
7.1.0.M6
?
mysql
mysql-connector-java
8.0.23
org.mybatis
mybatis
3.4.5
?
org.slf4j
slf4j-log4j12
1.7.26
org.slf4j
jcl-over-slf4j
1.7.26
?
junit
junit
4.12
?
commons-io
commons-io
2.6
?
spring核心配置文件:resource目录下创建activiti.cfg.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
?
?
?
?
日志文件log4j.properties:
log4j.rootCategory=debug, CONSOLE, LOGFILE
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
?
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{HH:mm:ss.SSS} %p [%t] %C.%M(%L) | %m%n
?
# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=log/study/activiti/activiti.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
?
测试方法:
/**
* @author: shaoyun_Wang
* @create: 2022-05-19 23:10
* @Description:
*/
public class ActivitiTest01 {
?
/**
* 创建 Activiti 流程引擎实例
*/
@Test
public void getProcessEngine(){
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
System.out.println("processEngine:" + processEngine);
}
}
运行结束后,数据库会自动创建出25张表:
-
底层实现
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //进入getDefaultProcessEngine()方法判断当前有无processEngine
public static ProcessEngine getDefaultProcessEngine() { return getProcessEngine("default"); } ? public static ProcessEngine getProcessEngine(String processEngineName) { if (!isInitialized()) { init(); } ? return (ProcessEngine)processEngines.get(processEngineName); }如果没有调用init方法:默认情况下加载名为
activiti.cfg.xml的文件,然后调用initProcessEngineFromResource方法,去初始化ProcessEngine
再看initProcessEngineFromResource方法:调用了buildProcessEngine方法创建ProcessEngine
再进入buildProcessEngine方法:将文件转成流,再调用ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream)返回ProcessEngineConfiguration,去创建ProcessEngine
createProcessEngineConfigurationFromInputStream方法:最终调用BeansConfigurationHelper去创建,并且传参beanName=processEngineConfiguration
createProcessEngineConfigurationFromInputStream方法有很多种,因此我们可以指定特定名字的核心配置文件
//自定义配置文件名,不需要他默认的;
ProcessEngineConfiguration configuration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti2.cfg.xml","processEngineConfiguration22");
ProcessEngine processEngine1 = configuration.buildProcessEngine();
同样也能创建ProcessEngine: