一、搭建项目架构
- 使用idea需要安装actiBPM插件用来画流程图
- 创建一个空的java项目,并添加文件夹如下:
lib:存放需要使用的jar包,可从下面链接直接下载解压,记得加入将包加入项目中,如下:
jar包提取码:c0zq
resource:存放资源文件,比如bpmn流程文件等 - 新建一个流程first.bpmn
- 添加log4j.properties文件,配置日志
log4j.rootLogger=INFO, stdout # Console Appender log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern= %d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n # Custom tweaks log4j.logger.com.codahale.metrics=WARN log4j.logger.com.ryantenney=WARN log4j.logger.com.zaxxer=WARN log4j.logger.org.apache=WARN log4j.logger.org.hibernate=WARN log4j.logger.org.hibernate.engine.internal=WARN log4j.logger.org.hibernate.validator=WARN log4j.logger.org.springframework=WARN log4j.logger.org.springframework.web=WARN log4j.logger.org.springframework.security=WARN
- 引入activiti的配置文件activiti.cfg.xml
可从官网复制:activiti.cfg.xml
修改如下:<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"> <!--如果mysql是8.0,需要自己引用对应的mysql-connector-java-8.0.16.jar,并在连接上加上时区如下--> <!--<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?serverTimezone=UTC" />--> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti?characterEncoding=utf-8&useUnicode=true&useSSL=true" /> <property name="jdbcDriver" value="com.mysql.jdbc.Driver" /> <property name="jdbcUsername" value="root" /> <property name="jdbcPassword" value="123456" /> <property name="databaseSchemaUpdate" value="true" /> <!--以下注释掉--> <!-- <property name="asyncExecutorActivate" value="false" />--> <!-- <property name="mailServerHost" value="mail.my-corp.com" />--> <!-- <property name="mailServerPort" value="5025" />--> </bean> </beans>
- 创建对应的数据库
二、解决IDEA中Activiti的中文乱码
- 进入idea的安装目录
- 打开这两个文件,在最后面添加一行
-Dfile.encoding=UTF-8
- 重启IDEA即可。
三、编码
- 在src对应目录下创建类:ActivitiTest,编码如下
package com.xjf.c3; /*注意导入activiti6.0的包*/ import org.activiti.engine.*; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; /** * @Auther: XuJiaFei * @Date: 2019/11/8 09:49 * @Description: */ public class ActivitiTest { public static void main(String[] args) { //获取流程引擎 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //存储服务 RepositoryService repositoryService = processEngine.getRepositoryService(); //运行服务 RuntimeService runtimeService = processEngine.getRuntimeService(); //任务服务 TaskService taskService = processEngine.getTaskService(); //发布流程 repositoryService.createDeployment().addClasspathResource("first.bpmn").deploy(); //创建一个请假流程,获取流程实例。此处的流程id为first.bpmn的process的id ProcessInstance pi = runtimeService.startProcessInstanceByKey("myProcess_1"); //员工完成请假的任务 Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("当前流程节点:" + task.getName()); taskService.complete(task.getId()); //经理完成审批任务 task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("当前流程节点:" + task.getName()); taskService.complete(task.getId()); //流程执行完了,再去获取任务会为null task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("流程执行结束了:" + task); //关闭引擎 processEngine.close(); //退出 System.exit(0); } }
注意:
-
runtimeService.startProcessInstanceByKey(“myProcess_1”)对应的key,是first.bpmn中的,在idea中将first.bpmn重命名为first.xml,能看到对应的xml
千万注意将process后面的 xmlns=" " 去掉,不然会启动失败 -
运行后数据库会生成28张表
四、结果
该流程模拟实现了员工进行请假,然后经理进行审批的流程。