1)Help - Install New Software…
2)点击【Add】, 输入地址
Name: Activiti BPMN 2.0 designer
Location: http://activiti.org/designer/update/
3)回到Install界面,点击【select All】,然后下一步
4)点击复选框,在Detail部分记得选中 “Contact all updates sites…” , 因为它会检查所有当前安装所需要的插件并可以被Eclipse下载
5)检查安装
安装完毕后,点击新建工程new - other… 打开面板,如下这说明ok
1)Settings… - Plugins
2)搜索 actiBPM,安装后重启
3)说明:这个插件非官方,而且很久没有维护更新了,有些bug,不太好用
官方提供了activiti-app.war部署方式的画图包,官网地址
Acitiviti表的命名都是以ACT_开头的,中间一个两个字符表示表的类别,整体与API服务对应,以前是23张表,现在28张表
参考Activit数据库表结构说明
1)ACT_GE_ xxx:表示 general 全局通用数据及设置,各种情况都使用的数据
2)ACT_HI_ xxx:表示 history 历史数据表,包含着程执行的历史相关数据,如结束的流程实例,变量,任务等
3)ACT_ID_ xxx: 表示 identity 组织机构,用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组等
4)ACT_RE_ xxx:表示 repository 存储,包含的是静态信息,如,流程定义,流程的资源(图片,规则等)
5)ACT_RU_ xxx: 表示 runtime 运行时,运行时的流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti 只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录,保证了这些运行时的表小且快
1)通用数据表
ACT_GE_BYTEARRAY:二进制数据表,存储通用的流程定义和流程资源
ACT_GE_PROPERTY:系统相关属性,属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录
2)流程历史记录
ACT_HI_ACTINST:历史节点表
ACT_HI_ATTACHMENT:历史附件表
ACT_HI_COMMENT:历史意见表
ACT_HI_DETAIL:历史详情表,提供历史变量的查询
ACT_HI_IDENTITYLINK:历史流程人员表
ACT_HI_PROCINST:历史流程实例表
ACT_HI_TASKINST:历史任务实例表
ACT_HI_VARINST:历史变量表
3)用户用户组表
ACT_ID_GROUP:用户组信息表
ACT_ID_INFO:用户扩展信息表
ACT_ID_MEMBERSHIP:用户与用户组对应信息表
ACT_ID_USER:用户信息表
4)流程定义表
ACT_RE_DEPLOYMENT:部署信息表
ACT_RE_MODEL:流程设计模型部署表
ACT_RE_PROCDEF:流程定义数据表
5)运行实例表
ACT_RU_EVENT_SUBSCR:运行时事件 throwEvent、catchEvent 时间监听信息表
ACT_RU_EXECUTION:运行时流程执行实例
ACT_RU_IDENTITYLINK:运行时流程人员表,主要存储任务节点与参与者的相关信息
ACT_RU_JOB:运行时定时任务数据表
ACT_RU_TASK:运行时任务节点表
ACT_RU_VARIABLE:运行时流程变量数据表
6)其它表
ACT_EVT_LOG:事件日志
ACT_PROCDEF_INFO:流程定义的动态变更信息
pom依赖
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
application.properties配置
# 配置数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/activiti-demo?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.activiti.database-schema-update=true
spring.activiti.check-process-definitions=false
启动类
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
...
初始代码
@Test
public void initTables() {
// 创建流程引擎的配置
ProcessEngineConfiguration cfg = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
cfg.setJdbcDriver("com.mysql.jdbc.Driver");
cfg.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/activiti-demo");
cfg.setJdbcUsername("root");
cfg.setJdbcPassword("root");
/**
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE 如果数据库里面没有activit的表,也不会创建
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP 创建表,使用完之后删除
* ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE 如果数据库里面没有表,就创建
*
* dorp-create 代表如果数据库里面有表,那么先删除再创建
*
*/
//配置表的初始化的方式
cfg.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
//得到流程引擎
ProcessEngine engine = cfg.buildProcessEngine();
System.out.println(engine);
}
创建activiti.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" 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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.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/activiti-demo"></property>
<property name="jdbcUsername" value="root"></property>
<property name="jdbcPassword" value="root"></property>
<!--
flase: 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常。
true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建。
create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)。
drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)。 -->
<property name="databaseSchemaUpdate" value="drop-create"></property>
</bean>
</beans>
@Test
public void intiTables() {
ProcessEngineConfiguration cfg= ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("/activiti.cfg.xmls");
// 得到流程引擎
ProcessEngine engine = cfg.buildProcessEngine();
System.out.println(engine );
}
@Test
public void intiTables() {
//必须创建activiti.cfg.xml 并配置好数据库的信息
ProcessEngine engine=ProcessEngines.getDefaultProcessEngine();
System.out.println(engine);
}
//流程部署定义 act_ge_bytearray, act_re_deployment, act_re_model, act_re_procdef
@Autowired
private RepositoryService repositoryService;
//流程运行 act_ru_event_subscr, act_ru_execution, act_ru_identitylink, act_ru_job, act_ru_task, act_ru_variable
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
//历史记录 act_hi_actinst, act_hi_attachment, act_hi_comment, act_hi_detail, act_hi_identitylink, act_hi_procinst, act_hi_taskinst, act_hi_varinst
@Autowired
private HistoryService historyService;
///页面表单
@Autowired
private FormService formService;
//用户管理 act_id_group, act_id_info, act_id_membership, act_id_user
@Autowired
private IdentityService identityService;
//管理器
@Autowired
private ManagementService managementService;
1)新建demo01.bpmn文件
2)绘制流程图
定义流程模板ID和名称
注:判断条件也常用【排他网关】实现
涉及变量:
${userId} 任务处理人
${days <= 3} 项目经理审批即可
${days > 3} 需要总经理审批
//部署定义流程(文件名改为demo01.bpmn20.xml)
@Test
public void deployProcess() {
Deployment deploy = repositoryService.createDeployment().name("请教流程")
.addClasspathResource("bpmn/demo01.bpmn20.xml")
.deploy();
System.out.println("流程部署ID : " + deploy.getId());
}
//启动流程
@Test
public void startProcess() {
String businessKey = "BZ2021010510001"; //业务关联ID标识
String proKey = "demo01_id_10001";
Map<String, Object> vars = new HashMap<>();//流程变量设置
vars.put("userId", "张三");//指定任务处理人
runtimeService.startProcessInstanceByKey(proKey, businessKey, vars);
System.out.println("启动流程成功");
}
//查询任务
@Test
public void queryTask() {
List<Task> tasks = taskService.createTaskQuery()
.taskAssignee("张三") //查询条件指定
.orderByTaskCreateTime().desc() //排序方式
.list();//结果集
if (!CollectionUtils.isEmpty(tasks)) {
for (Task task : tasks) {
System.out.println("任务ID:" + task.getId());
System.out.println("任务办理人:" + task.getAssignee());
System.out.println("执行实例ID:" + task.getExecutionId());
System.out.println("任务名称:" + task.getName());
System.out.println("流程定义ID:" + task.getProcessDefinitionId());
System.out.println("流程实例ID:" + task.getProcessInstanceId());
System.out.println("任务创建时间:" + task.getCreateTime());
System.out.println("-----------------------------");
}
}
}
//办理任务
@Test
public void completeTask() {
String taskId = "5002";
Map<String, Object> vars = new HashMap<>();//流程变量设置
vars.put("userId", "王五");//指定任务处理人
vars.put("days", 4);//设置请假天数
taskService.complete(taskId, vars);
System.out.println("任务完成");
}
//删除部署定义流程
@Test
public void deleteProcessDef() {
String deploymentId = "1";
//根据流程部署id删除流程定义 如果当前id的流程正在执行,那么会报错
//repositoryService.deleteDeployment(deploymentId);
//根据流程部署id删除删除流程定义 如果当前id的流程正在执行,会把正在执行的流程数据删除 act_ru_*和act_hi_*表里面的数据
repositoryService.deleteDeployment(deploymentId, true);
// repositoryService.deleteDeploymentCascade(deploymentId);==repositoryService.deleteDeployment(deploymentId, true);
System.out.println("删除成功");
}
#RepositoryService
SELECT * FROM `act_ge_bytearray`; #二进制文件表
SELECT * FROM `act_re_deployment`;#流程部署表
SELECT * FROM `act_re_procdef`;#流程定义
SELECT * FROM `act_ge_property`;#工作流的ID算法和版本信息表
#RuntimeService TaskService
SELECT * FROM `act_ru_execution`;#流程启动一次只要没有执行完,就会有一条数据
SELECT * FROM `act_ru_task`;#可能有多条数据
SELECT * FROM `act_ru_variable`;#记录流程运行时的流程变量
SELECT * FROM `act_ru_identitylink`;#存放流程办理人的信息
#HistroyService
SELECT * FROM `act_hi_procinst`;#历史流程实例
SELECT * FROM `act_hi_taskinst`;#历史任务实例
SELECT * FROM `act_hi_actinst`;#历史活动节点表
SELECT * FROM `act_hi_varinst`;#历史流程变量表
SELECT * FROM `act_hi_identitylink`;##历史办理人表
SELECT * FROM `act_hi_comment`;#批注表
SELECT * FROM `act_hi_attachment`;#附件表
#IdentityService
SELECT * FROM `act_id_group` #角色
SELECT * FROM `act_id_membership`#用户和角色之间的关系
SELECT * FROM `act_id_info`#用户的详细信息
SELECT * FROM `act_id_user`#用户表
1)乱码效果
2)在idea\IntelliJ IDEA 2019.1.3\bin\idea64.exe.vmoptions文件中,追加编码设置
-Dfile.encoding=UTF-8
3)重启idea