activitiservice.java_Activiti的Java服务任务(ServiceTask)属性用法

本文介绍Java服务任务,其为自动任务可调用外部Java类。详细演示了Type为Class和Delegate Expression两种情况,包括参数设置、类代码编写、流程启动代码及结果展示,如在流程启动代码中可获取resultVar的值。

Java服务任务是自动任务,不用人为,调用外部Java类。

ec70f0049013667bff742990bc164978.png

Type为Class的情况

开始演示

Type选class

Class填com.plancode.ThrowErrorDelegate

Result Variable Name不允许填,因为只有type为Expression才有效

Fields为参数列表,这些参数就是通过ThrowErrorDelegate类的Expression属性注入的,我这里定义了两个参数,fieldA的type为String是静态参数写死的,另一个参数fieldB的type为Expression是表达式,里面可以使用流程变量动态给ThrowErrorDelegate类的Expression属性赋值

(1)流程图

27bc71eca6d91279fb2cba9235fd9358.png

(2)ThrowErrorDelegate类代码

package com.plancode;

import org.activiti.engine.delegate.*;

import org.springframework.stereotype.Service;

public class ThrowErrorDelegate implements JavaDelegate {

private Expression fieldA;

private Expression fieldB;

public void execute(DelegateExecution execution) throws Exception {

String result = fieldA.getValue(execution).toString() + fieldB.getValue(execution).toString();

execution.setVariable("resultVar", result);

}

}

(3)流程启动代码

Map variableMap = new HashMap();

variableMap.put("fieldB","valueB");

ProcessInstance pi = runtimeService.startProcessInstanceByKey("myProcess_1", variableMap);

Object resultVar = historyService.createHistoricVariableInstanceQuery().processInstanceId(pi.getId()).variableName("resultVar").singleResult().getValue();

(4)结果

在流程启动代码中的resultVar的值为:valueAvalueB

Type为Delegate Expression的情况

开始演示

Type选Delegate Expression

Delegate Expression填${throwErrorDelegate},注入spring管理的bean

Result Variable Name不允许填,因为只有type为Expression才有效

Fields为参数列表,这些参数就是通过ThrowErrorDelegate类的Expression属性注入的,我这里定义了两个参数,fieldA的type为String是静态参数写死的,另一个参数fieldB的type为Expression是表达式,里面可以使用流程变量动态给ThrowErrorDelegate类的Expression属性赋值

(2)流程图

15aa69c0c13d0548750b9579320ec845.png

(2)ThrowErrorDelegate类代码,多了一个@Service注解

```

package com.plancode;

import org.activiti.engine.delegate.*;

import org.springframework.stereotype.Service;

@Service

public class ThrowErrorDelegate implements JavaDelegate {

private Expression fieldA;

private Expression fieldB;

public void execute(DelegateExecution execution) throws Exception {

String result = fieldA.getValue(execution).toString() + fieldB.getValue(execution).toString();

execution.setVariable("resultVar", result);

}

报错日志 错误信息:测试连接失败,请检查连接配置CommonException(code=ILLEGAL_ARGUMENT, success=false, codeNum=10013, msg=测试连接失败,请检查连接配置) [com.bdilab.task_monitor.service.impl.SqlServerClient.getConnection(SqlServerClient.java:62), com.bdilab.task_monitor.service.impl.SqlServerClient.containsTable(SqlServerClient.java:287), com.bdilab.task_monitor.service.impl.AddInAndOutEleImpl.isTableExist(AddInAndOutEleImpl.java:798), com.bdilab.task_monitor.service.impl.AddInAndOutEleImpl.checkTableExist(AddInAndOutEleImpl.java:924), com.bdilab.task_monitor.service.impl.AddInAndOutEleImpl$$FastClassBySpringCGLIB$$9fce2843.invoke(<generated>), org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218), org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684), com.bdilab.task_monitor.service.impl.AddInAndOutEleImpl$$EnhancerBySpringCGLIB$$43fc2dda.checkTableExist(<generated>), com.bdilab.task_monitor.service.task.impl.KettleTaskServiceImpl.runTask(KettleTaskServiceImpl.java:124), com.bdilab.task_monitor.service.task.impl.KettleTaskServiceImpl$$FastClassBySpringCGLIB$$6ad37b2c.invoke(<generated>), org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218), org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:684), com.bdilab.task_monitor.service.task.impl.KettleTaskServiceImpl$$EnhancerBySpringCGLIB$$da7ec035.runTask(<generated>), com.bdilab.task_web.business.task.service.TaskService.run(TaskService.java:281), com.bdilab.task_web.business.task.service.TaskService$$FastClassBySpringCGLIB$$c44390c3.invoke(<generated>), org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218), org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163), org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88), com.bdilab.task_web.config.aop.OperationAspect.around(OperationAspect.java:59), sun.reflect.GeneratedMethodAccessor557.invoke(Unknown Source), sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43), java.lang.reflect.Method.invoke(Method.java:498), org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644), org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633), org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175), org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186), org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688), com.bdilab.task_web.business.task.service.TaskService$$EnhancerBySpringCGLIB$$71439a1d.run(<generated>), com.bdilab.task_web.business.process.util.ProcessDelegate.execute(ProcessDelegate.java:95), org.activiti.engine.impl.delegate.invocation.JavaDelegateInvocation.invoke(JavaDelegateInvocation.java:34), org.activiti.engine.impl.delegate.invocation.DelegateInvocation.proceed(DelegateInvocation.java:35), org.activiti.engine.impl.delegate.invocation.DefaultDelegateInterceptor.handleInvocation(DefaultDelegateInterceptor.java:25), org.activiti.engine.impl.bpmn.behavior.ServiceTaskJavaDelegateActivityBehavior.execute(ServiceTaskJavaDelegateActivityBehavior.java:40), org.activiti.engine.impl.bpmn.helper.ClassDelegate.execute(ClassDelegate.java:221), org.activiti.engine.impl.agenda.ContinueProcessOperation.executeActivityBehavior(ContinueProcessOperation.java:180), org.activiti.engine.impl.agenda.ContinueProcessOperation.executeSynchronous(ContinueProcessOperation.java:131), org.activiti.engine.impl.agenda.ContinueProcessOperation.continueThroughFlowNode(ContinueProcessOperation.java:89), org.activiti.engine.impl.agenda.ContinueProcessOperation.run(ContinueProcessOperation.java:55), org.activiti.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:73), org.activiti.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:57), org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:42), org.activiti.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:49), org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:63), org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:31), org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:29), org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:44), org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:39), org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceByKey(RuntimeServiceImpl.java:86), com.bdilab.task_web.business.process.util.ProcessThread.run(ProcessThread.java:44), java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149), java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624), java.lang.Thread.run(Thread.java:748)]
10-21
2025-12-12 02:00:07:437-----------任务执行开始,任务id 4326,执行id:d0e5bf6d78994f5ca73171c69158bdb3 ------------- 2025-12-12 02:00:54:861-构建输入组件开始 2025-12-12 02:00:54:863-构建databasemeta结束 2025-12-12 02:00:54:865-抽取的sqlSELECT `FID`,`FSUPPLIERID`,`FLINKMANID`,`FADDRESS`,`FPROVIDERSUPPLIERID`,`FPROVIDERLINKMANID`,`FPROVIDERADDRESS`,`FINVOICESUPPLIERID`,`FRECEIVESUPPLIERID`,`FFRAMENUM`,`FFRAMENAME`,`FFRAMEVERSION`,`FCONTPARTIESID`,`FPARTY1ST`,`FCONTACTPERSON1ST`,`FPHONE1ST`,`FPARTY2ND`,`FCONTACTPERSON2ND`,`FPHONE2ND`,`FFILINGERID`,`FFILINGDATE`,`FREVIEWDATE`,`FSIGNDATE`,`FTERMINATORID`,`FTERMINATEDATE`,`FPARTCID`,`FSIGNERID` FROM t_conm_purcontract_s 2025-12-12 02:00:54:867-构建输入组件结束 2025-12-12 02:00:54:874-outputStep:csv output-4326 2025-12-12 02:00:54:874-最后的步骤:table input-4326 2025/12/12 02:02:11 - Finished reading query, closing connection. 2025/12/12 02:02:11 - 完成处理 (I=0, O=2963, R=2963, W=2963, U=0, E=0) 2025/12/12 02:02:11 - 完成处理 (I=2963, O=0, R=0, W=2963, U=0, E=0) 2025/12/12 02:02:11 - Finished reading query, closing connection. 2025/12/12 02:02:11 - 完成处理 (I=33551, O=0, R=0, W=33551, U=0, E=0) 2025/12/12 02:02:11 - 完成处理 (I=0, O=33551, R=33551, W=33551, U=0, E=0) 2025-12-12 02:02:11:671------------任务底层逻辑执行完毕,任务id:4326 --------- 2025-12-12 02:02:11:672-------任务运行成功,任务id:4326 --------- 2025-12-12 02:02:12:205-File upload success,/mnt/vdb/hiveTableFile/137721.csv 2025-12-12 02:02:12:478-HIVE同步数据命令:load data local inpath '/mnt/vdb/hiveTableFile/137721.csv' overwrite into table hbis_data.ods_xsod_hbis_scm_t_conm_purcontract_S 2025-12-12 02:02:53:656-hive文件上传或loaddata失败java.lang.NullPointerException [com.bdilab.task_web.util.MySftpUtil.isExistDirOrFile(MySftpUtil.java:226), com.bdilab.task_web.util.MySftpUtil.deleteFile(MySftpUtil.java:151), com.bdilab.task_web.business.datasource.service.HiveService.deleteLocalFile(HiveService.java:294), com.bdilab.task_web.business.datasource.service.HiveService.loadData(HiveService.java:286), com.bdilab.task_web.business.task.service.TaskService.loadData2Hive(TaskService.java:407), com.bdilab.task_web.business.task.service.TaskService.run(TaskService.java:287), com.bdilab.task_web.business.task.service.TaskService$$FastClassBySpringCGLIB$$c44390c3.invoke(<generated>), org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218), org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163), org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88), com.bdilab.task_web.config.aop.OperationAspect.around(OperationAspect.java:59), sun.reflect.GeneratedMethodAccessor418.invoke(Unknown Source), sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43), java.lang.reflect.Method.invoke(Method.java:498), org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644), org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633), org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175), org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93), org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186), org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688), com.bdilab.task_web.business.task.service.TaskService$$EnhancerBySpringCGLIB$$480d54e2.run(<generated>), com.bdilab.task_web.business.process.util.ProcessDelegate.execute(ProcessDelegate.java:95), org.activiti.engine.impl.delegate.invocation.JavaDelegateInvocation.invoke(JavaDelegateInvocation.java:34), org.activiti.engine.impl.delegate.invocation.DelegateInvocation.proceed(DelegateInvocation.java:35), org.activiti.engine.impl.delegate.invocation.DefaultDelegateInterceptor.handleInvocation(DefaultDelegateInterceptor.java:25), org.activiti.engine.impl.bpmn.behavior.ServiceTaskJavaDelegateActivityBehavior.execute(ServiceTaskJavaDelegateActivityBehavior.java:40), org.activiti.engine.impl.bpmn.helper.ClassDelegate.execute(ClassDelegate.java:221), org.activiti.engine.impl.agenda.ContinueProcessOperation.executeActivityBehavior(ContinueProcessOperation.java:180), org.activiti.engine.impl.agenda.ContinueProcessOperation.executeSynchronous(ContinueProcessOperation.java:131), org.activiti.engine.impl.agenda.ContinueProcessOperation.continueThroughFlowNode(ContinueProcessOperation.java:89), org.activiti.engine.impl.agenda.ContinueProcessOperation.run(ContinueProcessOperation.java:55), org.activiti.engine.impl.interceptor.CommandInvoker.executeOperation(CommandInvoker.java:73), org.activiti.engine.impl.interceptor.CommandInvoker.executeOperations(CommandInvoker.java:57), org.activiti.engine.impl.interceptor.CommandInvoker.execute(CommandInvoker.java:42), org.activiti.engine.impl.interceptor.TransactionContextInterceptor.execute(TransactionContextInterceptor.java:49), org.activiti.engine.impl.interceptor.CommandContextInterceptor.execute(CommandContextInterceptor.java:63), org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:31), org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:29), org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:44), org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:39), org.activiti.engine.impl.RuntimeServiceImpl.startProcessInstanceByKey(RuntimeServiceImpl.java:86), com.bdilab.task_web.business.process.util.ProcessThread.run(ProcessThread.java:44), java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149), java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624), java.lang.Thread.run(Thread.java:748)] 2025-12-12 02:02:56:606-------loadData2Hive failed,任务id:4326 --------- 2025-12-12 02:02:57:007-任务:4326 运行结束,结果为:fail
最新发布
12-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值