工作流引擎Activiti入门
工作流引擎
工作流
BPM
BPMN
Activiti
Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准。
集成Activiti
新建数据库
新建项目
pom.xml:
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.0</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.duohoob</groupId> <artifactId>activity</artifactId> <version>0.0.1-SNAPSHOT</version> <name>activity</name> <description>Demo project for Spring Boot and Activiti</description> <properties> <java.version>1.8</java.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <activiti.version>7.0.0.Beta1</activiti.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--activiti核心包--> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>${activiti.version}</version> </dependency> <!--activiti与spring整合的包--> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring</artifactId> <version>${activiti.version}</version> </dependency> <!--bpmn模型处理--> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-model</artifactId> <version>${activiti.version}</version> </dependency> <!--bpmn转换--> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-converter</artifactId> <version>${activiti.version}</version> </dependency> <!--bpmn json数据转换--> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-json-converter</artifactId> <version>${activiti.version}</version> </dependency> <!--bpmn布局--> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-layout</artifactId> <version>${activiti.version}</version> </dependency> <!--bpmn云支持--> <dependency> <groupId>org.activiti.cloud</groupId> <artifactId>activiti-cloud-services-api</artifactId> <version>${activiti.version}</version> </dependency> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency> <!--连接池--> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
log4j的配置
在resources新建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{ISO8601} %-6r[%15.15t] %-5p %30.30c %x - %m\n log4j.appender.LOGFILE=org.apache.log4j.FileAppender #\u65E5\u5FD7\u7684\u5B58\u653E\u8DEF\u5F84 log4j.appender.LOGFILE.File=D:\\work\\eclipse-workspace2\\activity\\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
mysql的配置
按照Activiti的默认方式,在resources新建activiti.cfg.xml:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/contex http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- processEngine Activiti的流程引擎 --> <!-- 默认id对应的值为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://localhost:3306/activiti"/> <property name="jdbcUsername" value="root"/> <property name="jdbcPassword" value="root123"/> <!-- activiti数据库表处理策略 --> <property name="databaseSchemaUpdate" value="true"/> </bean> </beans>
生成mysql表
在test新建ActivityTest.java:
package com.duohoob.activity; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.junit.Test; public class ActivityTest {
/ * 使用activiti提供的默认方式来创建mysql的表 */ @Test public void createTable(){
// 使用classpath下的activiti.cfg.xml中的配置创建processEngine ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); System.out.println(engine); } }
流程操作
Activiti bpmn designer
流程定义
bpmn文件其实是通过xml文件表示业务流程,open with xml editor就可以查看xml内容。
流程存储/部署
bpmn定义好后,通过Activiti提供的api,将我们的流程保存到数据库中。
testDeployProcess
@Test public void testDeployProcess() {
// 创建processEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 得到RepositoryService实例 RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deploy = repositoryService.createDeployment() .addClasspathResource("bpmn/Leave.bpmn") .name("请假流程") .deploy(); System.out.println(deploy.getId()); System.out.println(deploy.getName()); }
流程启动
通过Activiti提供的api,开启一个流程实例。
testStartProcess
@Test public void testStartProcess() {
// 创建processEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 获取runtimeService RuntimeService runtimeService = processEngine.getRuntimeService(); // 启动流程 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess"); System.out.println("流程定义id:" + processInstance.getProcessDefinitionId()); System.out.println("流程实例id:" + processInstance.getId()); System.out.println("当前活动id:" + processInstance.getActivityId()); }
任务查询
查询当前Assignee待执行的任务,比如说worker。
testFindPersonalTaskList
@Test public void testFindPersonalTaskList() {
// 负责人 String assignee = "worker"; // 创建processEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 获取taskService TaskService taskService = processEngine.getTaskService(); // 获取任务列表 List<Task> list = taskService.createTaskQuery() .processInstanceId("17501") .taskAssignee(assignee) .list(); for (Task task : list) {
System.out.println("流程实例id:" + task.getProcessInstanceId()); System.out.println("任务id:" + task.getId()); System.out.println("任务负责人:" + task.getAssignee()); System.out.println("任务名称:" + task.getName()); } }
“17501”是上一步的流程实例ID。
任务处理
testcompleteTask
@Test public void testcompleteTask() {
// 负责人 String assignee = "worker"; // 创建processEngine ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); // 获取taskService TaskService taskService = processEngine.getTaskService(); // 获取任务 Task task = taskService.createTaskQuery() .processInstanceId("17501") .taskAssignee(assignee) .singleResult(); // 处理任务 taskService.complete(task.getId()); }
下一篇:工作流引擎Activiti入门-02
参考文章:
小Y先生。:Activiti工作流教程
Young丶:工作流引擎Activiti万字详细入门
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233876.html原文链接:https://javaforall.net