idea做springBoot集成Activiti开发

idea环境搭建

安装插件,搜索安装actiBPM,如果受限于网络,就访问https://plugins.jetbrains.com/plugin/7429-actibpm/versions下载安装

pom文件

activiti6,demo项目

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>6.0.0</version>
    <!--排除自带的mybatis-->
    <exclusions>
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

activiti7,demo项目

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter</artifactId>
    <version>7.1.0.M4</version>
    <exclusions>
        <!-- 需要排除自带的mybatis -->
        <exclusion>
            <groupId>org.mybatis</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>

绘制流程图

绘制完bpm文件后另存为xml文件,并删除 xmlns=""
在这里插入图片描述根据xml生成图片
在这里插入图片描述再将xml文件改回bpm文件

service介绍

servic解释
RepositoryService仓储服务,用于管理流程仓库,例如:部署,删除,读取流程资源
RuntimeService运行时服务,可以处理所有正在运行状态的流程实例,任务等
TaskService任务服务,用于管理,查询任务,例如:签收,办理,指派等
HistoryService历史服务,可以查询所有历史数据,例如:流程实例,任务,活动,变量,附件等
IdentityService唯一服务,可以管理,查询用户,组之间的关系
ManagementService引擎管理服务,和具体业务无关,主要是可以查询引擎配置,数据库,作业等

简单实例

参考demo项目

部署

/**
 * 创建流程部署
 * 在3张表中产生数据
 * act_ge_bytearray 流程资源文件(2条数据)
 * act_re_deployment 流程部署(1条数据)
 * act_re_procdef 流程实例(1条数据)
 */
@Test
public void deployProcess() throws Exception{
    //创建部署环境配置对象
    DeploymentBuilder deployment = repositoryService.createDeployment();
    //为本次部署命名
    deployment.name("公共任务请假流程");
    //添加流程规则文件和流程规则图片
    deployment.addClasspathResource("processes/commontask.bpmn").addClasspathResource("processes/commontask.png");
    //部署
    deployment.deploy();
}

/**
 * 查询流程定义信息
 * ProcessDefinition有4大属性要关注:
 * id      {key}:{version}:{随机序列}
 * name    流程规则文件process节点的name属性
 * key     流程规则文件process节点的id属性
 * version 流程版本,如果key存在,则在当前最高版本上加1;如果key不存在,从1开始
 */
@Test
public void queryProcessDefinition() throws Exception{
    //创建查询对象
    ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery();
    //添加查询条件
    //执行查询
    List<ProcessDefinition> list = query.list();
    //查询数量 query.count();
    //分页查询 query.listPage(firstResult, maxResults);
    //返回唯一结果,查询结果为多个则报错 query.singleResult();
    for (ProcessDefinition processDefinition : list) {
        System.out.println("id: " + processDefinition.getId() + ", name: " + processDefinition.getName()
                + ", key: " + processDefinition.getKey() + ", version: " + processDefinition.getVersion());
    }
}

/**
 * 删除流程部署
 */
@Test
public void deleteProcess() throws Exception{
    //流程部署id,act_re_deployment表id
    String deploymentId = "17501";
    //普通删除,会删除部署所产生的3张表信息
    repositoryService.deleteDeployment(deploymentId);
    //级联删除,会删除部署规则相关的所有信息,甚至包括历史
//        repositoryService.deleteDeployment(deploymentId, true);
}

/**
 * 查询流程规则文件
 */
@Test
public void queryProcessImage() throws Exception{
    //流程部署id,act_re_deployment表id
    String deploymentId = "5001";
    //部署资源名称
    List<String> resourceNames = repositoryService.getDeploymentResourceNames(deploymentId);
    //获取指定文件类型的文件
    String imageName = null;
    for (String resourceName : resourceNames) {
        if (resourceName.indexOf(".png") >= 0) {
            imageName = resourceName;
        }
    }
    //获取指定文件
    if (StringUtils.isNotBlank(imageName)) {

        try (InputStream in = repositoryService.getResourceAsStream(deploymentId, imageName);
             OutputStream out = new FileOutputStream(new File("E:\\a.png"))) {
            IOUtils.copy(in, out);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

启动流程

/**
* 1.启动流程
* 关注2张表:
* act_ru_execution : 所有流程按照规则指定到活动节点时,都会产生一个对应的Execution
* act_ru_task      : 只针对人工任务,针对Execution做的扩展信息描述
*/
@Test
public void startProcess() throws Exception{
   //流程定义的key
   String processDefinitionKey = "commontask";
   //根据流程定义的id启动流程
   //runtimeService.startProcessInstanceById(processDefinitionKey);
   //根据流程定义act_re_deployment表key启动最新版本的流程
   ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);
   System.out.println("processInstance: "+processInstance);
}

/**
* 2.查看私有任务
*/
@Test
public void queryPersonalTask() throws Exception{
   //流程实例id
   String processInstanceId = "2501";
   //代理人(办理人)
   String assignee = "副经理";

   //创建任务服务查询对象
   TaskQuery query = taskService.createTaskQuery();
   //通过流程实例id查询 query.processInstanceId(processInstanceId);
   //根据代理人(办理人)查询
   List<Task> taskList = query.taskAssignee(assignee).list();
   System.out.println("=====["+assignee+"]私有任务列表=====");
   taskList.forEach(task -> {
       System.out.println("id: "+task.getId()+" ,name: "+task.getName()+" ,assignee: "+
               task.getAssignee()+" ,createTime:"+task.getCreateTime());
   });
}

/**
* 2.查看公共任务
*/
@Test
public void queryCommonTask() throws Exception{
   //公共任务候选人
   String candidateuser = "副经理";
   //创建任务服务查询对象
   TaskQuery query = taskService.createTaskQuery();
   //根据候选人查询
   List<Task> taskList = query.taskCandidateUser(candidateuser).list();
   System.out.println("=====["+candidateuser+"]公共任务列表=====");
   taskList.forEach(task -> {
       System.out.println("id: "+task.getId()+" ,name: "+task.getName()+" ,assignee: "+
               task.getAssignee()+" ,createTime:"+task.getCreateTime());
   });
}

/**
* 3.认领任务
*/
@Test
public void claimTask() throws Exception{
   //待认领的公共任务id
   String taskId = "30002";
   //认领的用户名
   String userId = "副经理";
   taskService.claim(taskId, userId);
}

/**
* 4.完成任务
*/
@Test
public void completeTask() throws Exception{
   //任务id(act_ru_task表id)
   String taskId = "30002";
   taskService.complete(taskId);
}

/**
* 5.查询流程实例
*/
@Test
public void queryProcessInstancd() throws Exception{
   //流程实例id(act_ru_execution表id)
   String processInstanceId = "27501";
   //创建运行时服务查询对象
   ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery();
   //查询流程实例
   ProcessInstance processInstance = query.processInstanceId(processInstanceId).singleResult();
   if (null == processInstance) {
       System.out.println("流程已经结束");
   } else {
       System.out.println("获取到流程: "+processInstance);
   }

}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个快速开发框架,Activiti是一个流程引擎。在Spring Boot中集成Activiti,可以让开发者快速地构建出流程管理系统。 下面是具体的步骤: 1. 在pom.xml中添加Activiti的依赖: ``` <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <version>${activiti.version}</version> </dependency> ``` 2. 配置数据库 在application.properties中添加以下配置: ``` spring.datasource.url=jdbc:mysql://localhost:3306/activiti?useSSL=false spring.datasource.username=root spring.datasource.password=123456 ``` 3. 创建一个ProcessEngineConfigurationConfigurer的Bean来配置Activiti的数据库连接和自动部署: ``` @Bean public ProcessEngineConfigurationConfigurer processEngineConfigurationConfigurer() { return processEngineConfiguration -> { processEngineConfiguration.setDataSource(dataSource); processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE); processEngineConfiguration.setAsyncExecutorActivate(false); processEngineConfiguration.setJobExecutorActivate(false); processEngineConfiguration.setDeploymentResources(new ClassPathResource("processes/leave.bpmn")); }; } ``` 4. 在resources/processes目录下创建一个leave.bpmn文件,用来定义流程。 5. 创建一个RestController来处理流程相关的请求: ``` @RestController public class ProcessController { @Autowired private RuntimeService runtimeService; @PostMapping("/start-process") public String startProcess() { ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave"); return "流程已启动,流程实例ID:" + processInstance.getId(); } } ``` 6. 启动应用程序,访问http://localhost:8080/start-process,即可启动流程。 以上就是在Spring Boot中集成Activiti的步骤,可以根据实际需求进行扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值