这篇文章将为大家详细讲解有关spring boot activity 项目搭建的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<properties> <activiti.version>6.0.0</activiti.version> </properties> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>${activiti.version}</version> </dependency> <dependency> <groupId>org.activiti</groupId>--> <artifactId>activiti-spring-boot-starter-rest-api</artifactId>--> <version>${activiti.version}</version>--> </dependency> <dependency> <groupId>org.activiti</groupId>--> <artifactId>activiti-spring-boot-starter-actuator</artifactId>--> <version>${activiti.version}</version>--> </dependency>
启动文件上排除 @SpringBootApplication(exclude = org.activiti.spring.boot.SecurityAutoConfiguration.class)
application.yml 注意 datasource.url 要加&nullCatalogMeansCurrent=true ,项目启动时数据库表会自动建立
spring: activiti: database-schema-update: true job-executor-activate: true # asyncExecutorEnabled属性设置设置true后将代替那些老的Job executor history-level: full db-history-used: true check-process-definitions: true # 自动部署验证设置:true-开启(默认)、false-关闭 datasource: driver-class-name: com.mysql.cj.jdbc.Driver password: url: jdbc:mysql:///?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true username:
备注:idea 乱码解决方案 :点击 idea->help 菜单->edit Custome Vm Option 菜单 ,增加一行 -Dfile.encoding=UTF-8 重启即可解决乱码
在resource 目录下建立 processes 文件夹 ,右键文件夹新建*.bpmn 文件 可以画流程图 (spring boot bpmn 默认读取路径是 resource/processes/) 类似: start ->server_task->user_task->end 四个简单的流程图
新建测试用例
startProcessInstanceByKey(key), resource/processes/key.bpmn 。 key.bpmn 后缀改为xml 修改xml中的process id="key"
@RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public class activitTest { @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Test @Deployment public void simpleProcessTest() { runtimeService.startProcessInstanceByKey("myProcess_1"); Task task = taskService.createTaskQuery().singleResult(); taskService.complete(task.getId()); } @Test public void queryProcessList(){ ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery().processDefinitionKey("myProcess_1"); List<ProcessInstance> list = query.list(); System.out.println(list.size()); list.forEach(e->{ Task task = taskService.createTaskQuery().processInstanceId(e.getProcessInstanceId()).singleResult(); taskService.complete(task.getId()); }); } }
上面已经可以跑起来了
为了和我们的业务联合起来 需要新建service
相应的流程图要调用下面的两个方法
start ->server_task->user_task->end 四个简单的流程图
server_task 加 activiti:expression="#{bootTestService.begin(execution)}" || server_task 在流程图上 改type=expression value=#{bootTestService.begin(execution)} 表示监听
user_task 加 activiti:candidateUsers="${bootTestService.end()}" || user_task 在流程图上 改Candidate Users value=${bootTestService.end()}
备注:事件监听是以#开头
@Service public class BootTestService { public void begin(DelegateExecution execution){ System.out.println("begint"); System.out.println(execution.getCurrentActivityId()); System.out.println(execution.getEventName()); System.out.println(execution.getTenantId()); } public List<String> end(){ System.out.println("end"); return Arrays.asList("hello","hello"); } }
最终执行 单元测试 主要表结构如下
//部署表
act_re_procdef 字段 process_id 字段 DEPLOYMENT_ID_
act_re_deployment
act_ge_bytearray
act_ge_property
//任务表
act_hi_procinst process 实例表
act_hi_taskinst PROC_INST_ID_ 字段跟上表关联 EXECUTION_ID_ 与下表关联
act_hi_actinst 具体的步骤表
TaskService :在 Activiti 中业务流程定义中的每一个执行节点被称为一个 Task,对流程中的数据存取,状态变更等操作均需要在 Task 中完成。 Task Service 提供了对用户 Task 和 Form 相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。
RuntimeService:在 Activiti 中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。Runtime Service 提供了启动流程、查询流程实例、 设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。
RepositoryService :Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件, 流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 Repository 中。Repository Service 提供了对 repository 的存取服务。
HistoryService :History Service 用于获取正在运行或已经完成的流程实例的信息,与 Runtime Service 中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。
FormService : Activiti 中的流程和状态 Task 均可以关联业务相关的数据。通过使用 Form Service 可以存取启动和完成任务所需的表单数据并且根据需要来渲染表单。
IdentityService :Activiti 中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的 Task。Identity Service 提供了对 Activiti 系统中的用户和组的管理功能。
ManagementService : Management Service 提供了对 Activiti 流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于 Activiti 系统的日常维护。
ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。 ACT_RU_*: ‘RU’表示runtime,运行时表-RuntimeService。这是运行时的表存储着流程变量,用户任务,变量,职责(job)等运行时的数据。Activiti只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快。 ACT_ID_*: ’ID’表示identity (组织机构),IdentityService接口所操作的表。用户记录,流程中使用到的用户和组。这些表包含标识的信息,如用户,用户组,等等。 ACT_HI_*: ’HI’表示history,历史数据表,HistoryService。就是这些表包含着流程执行的历史相关数据,如结束的流程实例,变量,任务,等等 ACT_GE_*: 全局通用数据及设置(general),各种情况都使用的数据。
序号 表名 说明
1 act_ge_bytearray 二进制数据表
2 act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,
3 act_hi_actinst 历史节点表
4 act_hi_attachment 历史附件表
5 act_hi_comment 历史意见表
6 act_hi_identitylink 历史流程人员表
7 act_hi_detail 历史详情表,提供历史变量的查询
8 act_hi_procinst 历史流程实例表
9 act_hi_taskinst 历史任务实例表
10 act_hi_varinst 历史变量表
11 act_id_group 用户组信息表
12 act_id_info 用户扩展信息表
13 act_id_membership 用户与用户组对应信息表
14 act_id_user 用户信息表
15 act_re_deployment 部署信息表
16 act_re_model 流程设计模型部署表
17 act_re_procdef 流程定义数据表
18 act_ru_event_subscr throwEvent、catchEvent时间监听信息表
19 act_ru_execution 运行时流程执行实例表
20 act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息
21 act_ru_job 运行时定时任务数据表
22 act_ru_task 运行时任务节点表
23 act_ru_variable 运行时流程变量数据表
关于spring boot activity 项目搭建的示例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。