环境准备
1.安装基本的Java环境。(本步骤掠过。。。)
2.安装Activiti插件。(参考:https://blog.csdn.net/shipfei_csdn/article/details/105157702)
2.1 网上的小伙伴说有的idea版本可以直接从File->Settings->Plugins插件市场搜索“actiBPM”直接搜索到actiBPM插件。奈何我的idea版本没有这个插件。所以我选择用如下2.2的方法安装actiBPM插件。
2.2 官网下载actiBPM插件,进行本地安装。
2.2.1 现在jar包。(上链接:https://plugins.jetbrains.com/)
2.2.2 导入jar。File -> Settings -> Plugins -> Install Plugin from Disk,选择已经下载的jar,导入。
我的idea版本是2020年的,actiBPM所有版本都不兼容。后来我从新下载了idea的2019年是版本(idea 各版本下载地址https://confluence.jetbrains.com/display/IDEADEV/IDEA+2019.2+latest+builds)。重新导入jar,成功。
开发流程(参考https://www.cnblogs.com/xianshen/p/12742364.html)
步骤概览
代码结构
步骤详细说明及代码:
1.添加必要的jar(在此我一并导入 springboot,junit,mysql-connector,避免后续版本冲突出现的问题)
<?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.test</groupId>
<artifactId>wahaha</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--JUnit测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--- Activiti依赖导入 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>5.18.0</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>5.18.0</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
<exclusion>
<artifactId>spring-eans</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
<exclusion>
<artifactId>jackson-core-asl</artifactId>
<groupId>org.codehaus.jackson</groupId>
</exclusion>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
<exclusion>
<artifactId>commons-lang3</artifactId>
<groupId>org.apache.commons</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.10</version>
</dependency>
</dependencies>
</project>
2.配置数据库连接信息(数据库连接文件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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="123456"></property>
<property name="databaseSchemaUpdate" value="true"></property>
<!--开启异步执行器,异步才会自动异步执行,比如异步工作、定时器工作等-->
<property name="asyncExecutorActivate" value="true" />
</bean>
</beans>
3.生成数据库表
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.junit.Test;
public class MyWorkCreateTableTest {
@Test
public void createTable(){
ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
}
}
运行成功,生成24张表
4.直接在resource文件夹下,新建.Bpmn文件(myWork.bpmn)
5.设计流程,直接拖动右侧的控件至中间的画布
Start Event 是流程的开始,必须要有的
End Event是结束的节点,必须要有
中间可以拖拽自己需要的控件(UserTask:是针对用户执行人操作,ServiceTask:是针对服务的操作,通常用来关联方法
本例中做最简单的审核流程,添加两个UserTask
元素都添加好后,点击每一个元素的中心位置拉向另一个元素,即可产生连接线,至此一个流程就完成了
此案例的意思为:开始->审核->请假->完成
6.部署流程
部署代码
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.repository.DeploymentBuilder;
import org.junit.Test;
public class MyWorkDeploy {
ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
@Test
public void deployProcess(){
RepositoryService repositoryService = processEngine.getRepositoryService();
DeploymentBuilder builder = repositoryService.createDeployment();
builder.addClasspathResource("myWork.bpmn");
builder.deploy();
}
}
运行成功(对应数据库会生成数据)
7.启动实例
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RuntimeService;
import org.junit.Test;
public class MyWorkStart {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void startProcess(){
RuntimeService runtimeService = processEngine.getRuntimeService();
runtimeService.startProcessInstanceByKey("myProcess_1");
}
}
运行结果,查看到审核数据已经插入到数据库表中
8.完成任务
手动执行任务需要查看当前任务ID,在表act_ru_task表中
执行将id带入完成方法(5004)
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.junit.Test;
public class MyWorkProcessApproval {
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
@Test
public void startProcessApproval(){
TaskService taskService = processEngine.getTaskService();
String taskId = "5004";
taskService.complete(taskId);
}
}
执行结果
至此一个工作流执行结束了。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本文旨在使用层面进行指引,具体每张表的含义,activiti更丰富的Job,网关,用户组等功能,静待续写。。。