一、搭建项目架构
- 使用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" />
<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>
- 创建对应的数据库
二、编码
- 在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张表