flowable笔记-环境配置
简介
Flowable是⼀款基于Java的开源业务流程引擎,核⼼BPMN流程引擎,附带DMN决策表和CMMN案例管理引擎。
与Spring完美集成,本⾝⾃带REST API。
⽬前最新版是Flowable 6.4.0(2018年10⽉26⽇)
集成到springboot
1. maven依赖
使⽤的springboot版本2.0.5.RELEASE
flowable提供了与springboot集成的starter包,只需要引⼊到pom⽂件⾥,
⼀定要注意引⼊⾃⼰需要的就⾏了!
starter详细
flowable-spring-boot-starter-cmmn包含CMMN案例管理引擎
flowable-spring-boot-starter-cmmn-rest同上,另外包含REST API
flowable-spring-boot-starter-dmn包含DMN决策表引擎
flowable-spring-boot-starter-dmn-rest同上,另外包含REST API
spring启动流程面试回答flowable-spring-boot-starter-process包含业务流程引擎,会⾃动扫描resources/processes下
的.bpmn20、.l⽂件并部署
flowable-spring-boot-starter-process-rest同上,另外包含REST API
flowable-spring-boot-starter包含flowable全家桶(Process流程引擎, CMMN案例管理引擎, DMN决策表
引擎, Form表单, Content 以及 IDM⽤户认证)
flowable-spring-boot-starter-rest同上,另外包含REST API
flowable-spring-boot-starter-actuator Spring启动的⼀些依赖
在mvnrepository⾥有⼀个flowable-spring-boot-starter-basic,这个其实就
是flowable-spring-boot-starter-process,对,是改名的锅。
flowable-spring-boot-starter-actuator好像没什么⽤。
这次引⼊的maven依赖:
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-process-rest</artifactId>
<version>6.4.0</version>
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-actuator</artifactId>
<version>6.4.0</version>
</dependency>
<!------------------------------- 其他 --------------------------------->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mysql数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
2. 数据源配置
由于使⽤的是阿⾥巴巴的druid连接池,注册DruidDataSource就⾏了,详情参考。
第⼀次使⽤会创建表到数据库⾥,如果遇到ption.LockException,需要⼿动把表名后缀为databasechangeloglock的字段LOCKED⾥的值由1改成0(原因可能是多次更换flowable依赖)。
3. 流程设计器、⽤户和流程管理系统
⾸先下载
在webapps⽬录⾥有四个war包
flowable-idm:⽤户管理、授权
flowable-admin:实例、任务管理
flowable-modeler:设计器
flowable-task:个⼈任务管理
这些war包都能直接使⽤java -jar flowable-[项⽬].war启动。
注意:flowable-idm也⽤于其他项⽬的登陆授权。
这时还不能启动,需要修改⼀些配置:
1. 依次解压,打开其中的WEB-INF\classes⽬录,修改flowable-default.properties⽂件⾥的数据库连接信息(
spring.datasource.driver-class-name、
spring.datasource.url、
spring.datasource.username、
spring.datasource.password),之后重命名⽂件为application.properties
2. 往WEB-INF\lib⾥加⼊数据库驱动⽂件,我的是mysql-connector-java-5.1.47.jar
最后使⽤/tomcat-flowable/bin/startup.bat启动,默认端⼝8080,访问地址:、、、。
默认账号:admin
默认密码:test
具体流程设计可以参考
4. 使⽤⽅法
这次使⽤的是ProcessEngine
ProcessEngine⾥常⽤的⼏个:
RepositoryService:定义流程和部署流程
RuntimeService: 开始新流程实例和查询
IdentityService:⽤户相关
TaskService: 任务查询与操作
HistoryService: 流程实例历史记录
在ProcessEngineServicesAutoConfiguration⾥已经把这些类注册到Spring⾥,使⽤的时候这样声明就⾏:
@Autowired
private RepositoryService repositoryService;
部署流程
Deployment deployment = ateDeployment()
// 项⽬路径
.addClasspathResource(classpath)
// 业务归档(BAR)⽂件
// .addZipInputStream(inputStream)
// 字节流
// .addInputStream(in)
// ⽂本
// .addString(xml)
.deploy();
开始流程(创建流程实例)
try {
/
/ 设置发起⼈
identityService.Id());
// processDefinitionKey 流程id
// businessKey ⾃定义编号,可以放业务编号
// variables ⾃定义参数
runtimeService.startProcessInstanceByKey(key, Id(), vars);
} finally {
// 单线程需要这样处理,原⽂如下:
// Passes the authenticated user id for this particular thread. All service method (from any service) invocations done by the same thread will have access to this authenticatedUserId. identityService.setAuthenticatedUserId(null);
}
处理任务
taskServiceplete(taskId, params);
获取历史流程实例
HistoricProcessInstanceQuery query = ateHistoricProcessInstanceQuery();
// query.unfinished() 未结束的流程实例
// query.finished() 已结束的流程实例
// query.variableValueEquals("UserId", Id()) 查询实例变量
// query.Id()) 由谁发起,需要开始的时候设置identityService.Id())
// 按照开始时间倒序
List<HistoricProcessInstance> list = derByProcessInstanceStartTime().desc().list()
获取历史流程实例变量
Map<String, Object> params = ateHistoricVariableInstanceQuery()
// 实例id
.processInstanceId(id)
.list().stream()
// 组装成Map
.Map(HistoricVariableInstance::getVariableName, HistoricVariableInstance::getValue));
获取进⾏中的流程实例任务变量(不能获取已结束的)
TaskQuery query = ateTaskQuery();
Task task = query.taskId(taskId).singleResult();
Map<String, Object> params = ExecutionId());
获取历史流程实例活动
List<HistoricActivityInstance> activities = ateHistoricActivityInstanceQuery()
// 实例id
.processInstanceId(id)
.list();
通⽤查询流程实例任务
// 需要事先指定是否正在进⾏
TaskInfoQueryWrapper taskInfoQueryWrapper = runtime ? new ateTaskQuery()) : new ateHistoricTaskInstanceQuery());
TaskInfoQuery query = TaskInfoQuery();
List<TaskInfo> tasks = query.list();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论