环境搭建
下载 actiBPM 插件
网址:https://plugins.jetbrains.com/plugin/7429-actibpm/versions
依赖
<!--- Activiti依赖导入 -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring</artifactId>
<version>7.1.0.M4</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-engine</artifactId>
<version>7.1.0.M4</version>
</dependency>
yml配置
devtools:
restart:
enabled: true #设置开启热部署
activiti:
database-schema-update: true
history-level: full
db-history-used: true
check-process-definitions: true # 是否开启自动部署,false表示不开起
process-definition-location-prefix: classpath:/processes/ # 自动部署的时候打开这个
async-executor-activate: false # 启用异步执行器
job-executor-activate: false # 启用作业执行器
log4j 日志监控配置—log4j.properties
log4j.rootCategory=debug,CONSOLE,LOGFILE
log4j.logger.org.apache.axis.enterprise=FATAL,CONSOLE
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
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
#日志的存放路径
log4j.appender.LOGFILE.File=d:\\SOFT\\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
创建数据库中需要的表(25张)
- test下建立工具类
- act_hi_*:'hi’表示 history,历史数据。_
- act_ge:'ge’表示 general,通用数据。
- act_evt_:'evt’表示 event,事件日志。
- act_procdef_*:'procdef’表示processdefine,流程定义信息。_
- act_re:'re’表示 repository,静态资源。
- act_ru_:'ru’表示 runtime,表示运行时数据。
/**
*使用activiti提供的默认方式来创建mysql的表
*/
@Test
public void createTable(){
//执行该方法,会在数据库自动生成activiti所需的25张表
ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();
System.out.println(engine);
}
其他相关配置 ------- activiti.cfg.xml —生产环境有变动
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.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="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/activiti" />
<property name="username" value="root" />
<property name="password" value="root" />
<property name="maxActive" value="3" />
<property name="maxIdle" value="1" />
</bean>
<!--工作流引擎配置-->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<!--数据源-->
<property name="dataSource" ref="dataSource" />
<!--使用spring事务管理器-->
<property name="transactionManager" ref="transactionManager" />
<!--数据源策略-->
<!--
databaseSchemaUpdate取值:
false:默认值。在activiti启动时,会对比数据库表中保存的版本,如果没有表或版本不匹配,将抛出异常。(生产环境常用)
true:activiti会对数据库中所有表进行更新操作。如果表不存在,将会创建。(开发环境常用)
create-drop:在activiti启动时创建表,在关闭时删除表,必须手动关闭引擎才会删除表。(单元测试用)
drop-create:在activiti启动时删除旧表,然后创建新表,不需要关闭引擎。
-->
<property name="databaseSchemaUpdate" value="true" />
</bean>
<!--流程引擎-->
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>
<!--资源服务service-->
<bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" />
<!--流程运行service-->
<bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" />
<!--任务管理service-->
<bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" />
<!--历史任务service-->
<bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" />
<!--事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 传播行为 -->
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
<tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 切面,根据具体项目修改切点配置-->
<aop:config proxy-target-class="true">
<aop:advisor advice-ref="txAdvice"
pointcut="execution(* com.hll.service.impl..*.*(..))"/>
</aop:config>
</beans>
流程文件存放位置
- png:自定义
- bpmn:processes下
使用笔记
部署方式
- 创建流程引擎
开发时固定流程
- 打包zip
- png和bpmn
- 用户自定义流程
- 修改流程表
- 上线后流程部署
流程部署id:deployment.getId()
流程部署名称:deployment.getName() --------启动流程
Activiti操作
-
启动
- Runtime.startProcessInstanceByKey(“test”); //流程部署名称
-
查
- 查询条件
- 流程部署名称 —processDefinitionKey
- 实例id ----processInstanceId
- 要查询的负责人 ---- taskAssignee
- 查询条件
-
改
- 完成任务
- taskService.complete(任务id)
- 完成任务
-
删
-
实例未启动
repositoryService.deleteDeployment(deploymentId);
-
实例已启动
repositoryService.deleteDeployment(deploymentId,true);
-
-
挂起
-
应用场景:规定时段不允许执行流程
-
分类:
- 流程挂起
repositoryService.suspendProcessDefinitionById( processDefinitionId,true,null);//参数1 :流程定义id ,参数2:是否激活,参数3:激活时间
-
实例挂起
runtimeService.suspendProcessInstanceById(processDefinitionId);//流程id
-
-
激活
-
流程激活
repositoryService.activateProcessDefinitionById( processDefinitionId,true,null);//参数1 :流程定义id ,参数2:是否激活,参数3:激活时间
-
实例激活
runtimeService.activateProcessInstanceById(processDefinitionId);//流程id
-