当前位置: 首页 > 知识库问答 >
问题:

可流动:不使用xml从java代码执行服务任务

商天逸
2023-03-14

我在spring-boot中使用Flowable 6.4.1来创建进程并从我的java代码运行,但要求不使用任何xml,因此,我遇到了一个障碍。

我有一个用户任务,从用户获取输入,根据该输入,对相应的服务任务进行调用

下面是我将要做的一个简短示例:

<process id="basicprocess" name="Basic Process" isExecutable="true">

    <startEvent id="startEvent"/>
    <sequenceFlow sourceRef="startEvent" targetRef="getInput"/>

    <userTask id="getInput" name="Get input from user" />
    <sequenceFlow sourceRef="getInput" targetRef="decision"/>

    <exclusiveGateway id="decision"/>
    <sequenceFlow sourceRef="decision" targetRef="firstServiceTask">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[
          ${number>100}
        ]]>
      </conditionExpression>
    </sequenceFlow>
    <sequenceFlow  sourceRef="decision" targetRef="secondServiceTask">
      <conditionExpression xsi:type="tFormalExpression">
        <![CDATA[
          ${number<=100}
        ]]>
      </conditionExpression>
    </sequenceFlow>

    <serviceTask id="firstServiceTask" name="Number is greater than predefined target"
        flowable:class="demo.service.tasks.FirstServiceTask"/>
    <sequenceFlow sourceRef="firstServiceTask" targetRef="greaterEnd"/>

    <serviceTask id="secondServiceTask" name="Number is less than predefined target"
        flowable:class="demo.service.tasks.SecondServiceTask"/>
    <sequenceFlow sourceRef="secondServiceTask" targetRef="lesserEnd"/>

    <endEvent id="greaterEnd"/>

    <endEvent id="lesserEnd"/>

  </process>
@RestController
@SuppressWarnings("rawtypes")
public class DefinitionsController {

    @Autowired
    private RepositoryService mRepositoryService;

    @Autowired
    private RuntimeService mRuntimeService;

    @Autowired
    private TaskService mTaskService;

    @PostMapping("/start-service")
    public String startService(@RequestBody String input) {
        Integer request = Integer.parseInt(input);
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("number", request);

        ProcessInstance instance = mRuntimeService.startProcessInstanceByKey("basicprocess", variables);

        Task userTask = mTaskService.createTaskQuery().processInstanceId(instance.getId()).taskDefinitionKey("getInput").singleResult();
        mTaskService.complete(userTask.getId());

        return "ProcessInstance id is "+instance.getProcessInstanceId();
    }

}

FirstServiceTask.java:

public class FirstServiceTask implements JavaDelegate{

    @Override
    public void execute(DelegateExecution execution) {
        System.err.println("Came in first service task");
    }

}

对于SecondServiceTask.java也是如此,除了sysout语句。

REST响应:我得到processInstance Id和相应服务任务的sysout语句,在控制台中得到打印…

我浏览了文档,但只找到了xml方式。

共有1个答案

欧渝
2023-03-14

用Java代码配置服务任务(使用flowable-modeler创建)可以通过以下4种方式完成。

将要配置的委托表达式应该出现在类路径上,或者应该创建一个spring-bean。

我使用main类中的一个方法创建bean,并将方法的名称放在flowable-modeler/processapi中的delegate expression属性中。

 类似资料:
  • 我找不到关于我们被要求进行的调查的具体答案 我看到并行流在使用少量线程时性能可能不是那么好,而且当DB在处理当前请求的同时阻止下一个请求时,它的表现显然也不是那么好 然而,我发现实现任务执行器与并行流的开销是巨大的,我们实现了一个POC,它只需要这一行代码就能满足并发需求: 而在Task Executor中,我们需要重写Runnable接口并编写一些繁琐的代码,以使Runnable不是空的,并返回

  • 我想使用Java代码启动weblogic服务器,并尝试了许多选项。在我的计算机中,startweBlogic.cmd文件位于 D:\Oracle\Middleware\user_projects\domains\ass1\startweBlogic.cmd

  • WSL使gcc和其他Linux工具变得容易。您可以使用脚本来快速配置WSL开发环境,因此如果您搞砸了一些事情,您可以快速销毁它,并以最小的成本重新开始。因此,我想在WSL而不是Windows上运行任务。 例如,在Sublime3中,我可以使用GCC的WSL安装构建C代码,只需使用以下代码创建一个新的构建系统: 到目前为止,我一直在努力想办法在VS Code上复制这个,但没有成功。似乎至少还有一个人

  • 本文向大家介绍Laravel定时任务的每秒执行代码,包括了Laravel定时任务的每秒执行代码的使用技巧和注意事项,需要的朋友参考一下 laravel中的任务调度可以不将每条命令都写入crontab,便于管理维护,而且可以基于laravel框架环境运行,而不需写独立的脚本执行,非常方便,但是最小的执行间隔也是一分钟,要想达到每秒执行的效果,就要借助shll脚本了,在shell脚本里循环60次每秒执

  • 我有代码: 年级4.5.1对此警告为 但是link没有给我任何可以替换它的提示,因为我不能仅仅设置任务依赖项,比如dependsOn或FinalizdBy--它不是从其他任务调用的,而是从构建的末尾调用的。

  • 我的要求是在每个用户任务的条目上执行一些java代码。参考《用户指南》,我能够使用进入操作(bpmn)实现这一点。 由于必须在每个用户任务的条目上执行同一段代码,因此我不想在所有用户任务上配置它。jbpm是否提供了任何接口,我可以在其中以编程方式指定输入操作,而不是在bpmn中的每个用户任务上指定。