我和小伙伴聊了下Flowable中的ReceiveTask和UserTask。今天我们就来看看另一个常见的Task-->ServiceTask。1、ServiceTaskServiceTask顾名思义就是一个服务任务,其图标一般如下:ServiceTask通常由系统自动完成。当流程执行到这一步时,不会自动停止,而是会执行。ServiceTask中配置的方法。2.实践下面通过一个简单的例子来看看ServiceTask是如何工作的。假设我有一个简单的流程图如下:中间的是一个ServiceTask。流程执行到ServiceTask时,具体应该做什么?这里设置任务的方式有3种,我们分别来看。2.1监听器类首先,我们可以建立一个监听器类。这个监听器类有一个硬性规定,它需要实现JavaDelegate接口,如下:我的服务任务==========”);}}在这个监听类中,我们可以完成一些操作,通过这个执行,我们还可以获得进程节点变量之间传输的数据。定义好这个类之后,那么我们就可以在定义流程的时候配置这个类的全路径了,如下图:这个配置对应的XML内容如下:测试流程朋友可以看到,ServiceTask标签中的flowable:class="org.javaboy.flowableidm.MyServiceTask"表示ServiceTask执行的服务类配置完成后,我们可以部署并启动这个进程,因为这个进程除了开始和结束只有一个节点,所以进程一开始就会自动结束。不过在这个过程中,我们可以看到控制台打印出了日志,说明确实执行了ServiceTask.2.2委托表达式我们也可以配置委托表达式,委托表达式是指将一个实现了JavaDelegate接口的类注册到Spring容器中,然后我们就不需要在流程节点的配置,只需要在Spring容器中写入Bean名称即可,像这样:@ComponentpublicclassMyServiceTaskimplementsJavaDelegate{@Overridepublicvoidexecute(DelegateExecutionexecution){===我的服务任务==========");}}这个类在Spring容器中注册的默认名称是类名的首字母小写,即myServiceTask。现在我们在流程图中,我们可以这样配置:对应的XML文件如下:可以看到,flowable:delegateExpression="${myServiceTask}"表示执行一个表达式测试流程,与2.1节中的相同,这里不再赘述。最后总结一下,委托表达式一定是JavaDelegate接口的实现类。在Spring容器中注册这个实现类,然后在使用时根据bean的名字从Spring容器中查找。2.3表达式我们也可以使用表达式。表达式是普通类的普通方法。在Spring容器中注册这个普通类,然后在表达式中执行这个类中的方法,类似下面,任意定义一个Java类:@ComponentpublicclassMyServiceTask2{publicvoidhello(){System.out.println("========MyServiceTask2==========”);}}然后在流程图中配置如下:表达式有部分内容被隐藏,完整的表达式为${myServiceTask2.hello()}。对应的XML文件如下:>sequenceFlow>可以看到表达式的内容是flowable:expression="${myServiceTask2.hello()}测试方法同2.1节,这里不再赘述。3.类中的字段可能有小伙伴注意到了,当我们画流程图,我们也可以给班级设置一个字段。比如我想为ServiceTask的执行类设置一个用户名字段,如下:设置完成后,对应的XML如下:测试流程</endEvent>可以看到,这里通过extensionElements节点描述了额外的信息接下来,我们可以在Java类中访问这个变量,如下:@ComponentpublicclassMyServiceTaskimplementsJavaDelegate{Expressionusername;@Overridepublicvoidexecute(DelegateExecutionexecution){System.out.println("username.getExpressionText()="+username.getExpressionText());System.out.println("用户名.getValue(执行)="+用户名.getValue(执行));System.out.println("========MyServiceTask==========");}}想要获取username对应的值,在上面这段代码中,宋哥给大家展示了两种方法。但是需要注意的是,这种在类中设置字段的方法适用于2.1和2.2节的情况,不适用于2.3节的情况。好了,今天就和小伙伴们介绍一下ServiceTask执行的三种情况。我也会把这些内容录制成视频,放在以后的天津项目中。有兴趣的朋友可以试试~