一、新建Maven项目
二、安装actiBPM插件
三、更改pom文件导入依赖
<?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>org.example</groupId>
<artifactId>activiti</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-model</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-converter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.activiti/activiti-engine -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-json-converter</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-bpmn-layout</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>org.activiti.cloud</groupId>
<artifactId>activiti-cloud-services-api</artifactId>
<version>7.0.0.Beta1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>
四、创建数据库(activiti)
五、使用JAVA代码生成数据库表(activiti自动生成25张表)
-
配置log4j,resources下创建log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE. #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal log4j.rootCategory=debug, CONSOLE, LOGFILE # Set the enterprise logger category to FATAL and its only appender to CONSOLE. log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE # CONSOLE is set to be a ConsoleAppender using a PatternLayout. 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 # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=f:\act\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
-
添加activiti配置文件并进行配置
默认方式的要求是在 resources 下创建 activiti.cfg.xml 文件,注意:默认方式目录和文件名不能修改,因为activiti的源码中已经设置,到固定的目录读取固定文件名的文件。
<?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"> <!-- 这里可以使用 链接池 dbcp--> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql:///activiti" /> <property name="username" value="root" /> <property name="password" value="123456" /> <property name="maxActive" value="3" /> <property name="maxIdle" value="1" /> </bean> <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <!-- 引用数据源 上面已经设置好了--> <property name="dataSource" ref="dataSource" /> <!-- activiti数据库表处理策略 --> <property name="databaseSchemaUpdate" value="true"/> </bean> </beans>
六、创建测试代码生成表
package edu.cl.test; import org.activiti.engine.*; import org.activiti.engine.history.HistoricActivityInstance; import org.activiti.engine.history.HistoricActivityInstanceQuery; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinitionQuery; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.apache.commons.io.IOUtils; import org.junit.Test; import org.springframework.util.ResourceUtils; import java.io.*; import java.sql.PreparedStatement; import java.util.List; import java.util.zip.ZipInputStream; public class TestCreate { @Test public void testCreateDbTable(){ ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine(); System.out.println(processEngine); } }
入门API代码使用
-
创建bpmn文件、转为png
-
API操作
package edu.cl.test; import org.activiti.engine.*; import org.activiti.engine.history.HistoricActivityInstance; import org.activiti.engine.history.HistoricActivityInstanceQuery; import org.activiti.engine.repository.Deployment; import org.activiti.engine.repository.ProcessDefinition; import org.activiti.engine.repository.ProcessDefinitionQuery; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; import org.apache.commons.io.IOUtils; import org.junit.Test; import org.springframework.util.ResourceUtils; import java.io.*; import java.sql.PreparedStatement; import java.util.List; import java.util.zip.ZipInputStream; public class TestCreate { @Test public void testCreateDbTable(){ ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine(); System.out.println(processEngine); } /** * 部署流程 */ @Test public void testBpmnDeploy(){ ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); Deployment deployment=repositoryService.createDeployment() .name("出差流程申请") .disableSchemaValidation() .addClasspathResource("bpmns/BusinessTrip.bpmn") .addClasspathResource("bpmns/BusinessTrip.png") .deploy(); System.out.println("流程部署ID"+deployment.getId()); System.out.println("流程部署名字"+deployment.getName()); } /** * 启动流程实例 */ @Test public void testStartDeployment(){ /* * 1、获取工作流引擎 * 2、获取获取流程运行管理service * 3、通过流程定义Key启动流程 */ ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); ProcessInstance instance=runtimeService.startProcessInstanceByKey("myProcess_1"); System.out.println("流程定义ID"+instance.getProcessDefinitionId()); System.out.println("流程实例"+instance.getId()); System.out.println("当前活动的ID"+instance.getActivityId()); } /** *查询个人任务 * 1、获取流程引擎 * 2、获取任务service * 3、查通过任务service查询出当前节点的任务列表 */ @Test public void testFindTaskList(){ ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); TaskService taskService=processEngine.getTaskService(); /** * Task的类型为org.activiti.engine.task */ List<Task> tasks=taskService.createTaskQuery() .processDefinitionKey("myProcess_1") .taskAssignee("zhangsan") .list(); for(Task task:tasks) { System.out.println("任务实例"+task.getProcessInstanceId()); System.out.println("任务ID"+task.getId()); System.out.println("任务负责人"+task.getAssignee()); System.out.println("任务名称"+task.getName()); } } /* * 完成任务 * 1、获取流程引擎 * 2、获取service * 3、根据Id完成任务 */ @Test public void testCompeteTask(){ ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); TaskService taskService = processEngine.getTaskService(); taskService.complete("5005"); } /** * 使用zip包进行批量部署 * 1、获取流程引擎 * 2、获取service * 3、读取打包文件(zip),获取到Inpuststream * 4、通过Inpuststream构造zipInputStream * 5、完成部署 */ @Test public void testDeployByZip(){ ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); InputStream inputStream=this.getClass() .getClassLoader() .getResourceAsStream("bpmns/BusinessTrip.zip"); ZipInputStream zipInputStream=new ZipInputStream(inputStream); Deployment deploy=repositoryService.createDeployment() .disableSchemaValidation() .addZipInputStream(zipInputStream) .deploy(); System.out.println(deploy.getId()); System.out.println(deploy.getName()); } /** * 获取流程定义 * 1、获取流程引擎 * 2、获取service对象(RespositoryService) * 3、获取processDefinitionQuery对象 * 4、查询流程定义,返回流程定义集合 * 5、输出 */ @Test public void testGetProcessDefinition(){ ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery(); List<ProcessDefinition> processDefinitions=processDefinitionQuery.processDefinitionKey("myProcess_1") //排序 .orderByProcessDefinitionVersion() .desc() .list(); //输出信息 for (ProcessDefinition processDefinition:processDefinitions) { System.out.println("流程定义ID"+processDefinition.getId()); System.out.println("流程定义名称"+processDefinition.getName()); System.out.println("流程定义key"+processDefinition.getKey()); System.out.println("流程定义版本"+processDefinition.getVersion()); System.out.println("流程部署ID"+processDefinition.getDeploymentId()); } } /** * 删除流程部署信息 * */ @Test public void testDeleteDeploy(){ ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); String deploymentID="5001"; repositoryService.deleteDeployment(deploymentID,true); } /** * 下载Activiti资源文件 * 1、获取引擎 * 2、获取Respository * 3、获取查询对象,ProcessDefinitionQuery,查询流程定义信息(create) * 4、根据流程信息获取流程定义ID * 5、通过RespositoryService,传递id参数,读取资源信息(获取bpmn文件的流,获取png图片的流) * 6、构造outputStream流 * 7、输入输出流的转换 * 8、关闭流 */ @Test public void testDownload() throws IOException { ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine(); RepositoryService repositoryService = processEngine.getRepositoryService(); ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() .processDefinitionKey("myProcess_1") .singleResult(); String deploymentId=processDefinition.getDeploymentId(); String pngName = processDefinition.getDiagramResourceName(); String bpmnName=processDefinition.getResourceName(); InputStream pngStream=repositoryService.getResourceAsStream(deploymentId,pngName); InputStream bpmnStream=repositoryService.getResourceAsStream(deploymentId,bpmnName); File pngFile = new File("E:/BusinessTrip.png"); File bpmnFile = new File("E:/BusinessTrip.bpmn"); FileOutputStream pngStreamOutput=new FileOutputStream(pngFile); FileOutputStream bpmnStreamOutput = new FileOutputStream(bpmnFile); IOUtils.copy(bpmnStream, bpmnStreamOutput); IOUtils.copy(pngStream,pngStreamOutput); pngStreamOutput.close(); bpmnStreamOutput.close(); pngStream.close(); bpmnStreamOutput.close(); } /** * 历史记录查询 */ @Test public void testGetHistory(){ //获取引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //获取service HistoryService historyService = processEngine.getHistoryService(); //获取查询对象 HistoricActivityInstanceQuery historicActivityInstanceQuery = historyService.createHistoricActivityInstanceQuery(); //通过实例对象查询历史记录,并对事件开始时间做升序排列 //还可以通过其他参数进行查询 historicActivityInstanceQuery.processInstanceId("7501") .orderByHistoricActivityInstanceStartTime() .asc(); //查询完成返回历史数组 List<HistoricActivityInstance> activityInstances=historicActivityInstanceQuery.list(); //遍历输出信息 for (HistoricActivityInstance historicActivityInstance:activityInstances) { System.out.println(historicActivityInstance.getActivityId()); System.out.println(historicActivityInstance.getActivityName()); System.out.println(historicActivityInstance.getProcessDefinitionId()); System.out.println(historicActivityInstance.getCalledProcessInstanceId()); } } }
-