Java工作流的应用目前非常广泛,能够很好地实现工作流也是其技术途径之一。 在这篇报道中,请小编告诉我们实现它的关键。
我们知道工作流的实现主要取决于反射机制,但要做到这一点,我们首先要创建工作流表
创建工作流表
例如,主键|工作流代码|工作流内容
其中,工作流的内容为Json格式
工作流内容{
' procCode':'OPS '
、' procName':'c端补充(乘客信息补充)。
,' taskControlVoList':[
{
' sortNo':'10 '
,' taskCode':'OPC '
、' taskName': '检查是否存在相应订单信息'
,' tasklassname ' : ' com.xf.flow.service.impl.order people 10 serv impl '
}
、{
' sortNo':'20 '
,' taskCode':'OPD '
、' taskName': '乘客数据库库存丢失'
,' tasklassname ' : ' com.xf.flow.service.impl.order people 20 serv impl '
}
、{
' sortNo':'90 '
,' taskCode':'RSP '
、“taskName': '响应消息”
,' tasklassname ' : ' com.xf.flow.service.impl.apiresponseservimpl '
}
]
}
ava代码现在从工作流代码中检索当前工作流
JSON str ———— JSON object ——3354 taskcontrolvolist获取
java工作流代码@Override
publicapiresponsedeal (字符串项no,ObjectobjVo,Stringskey,InnerVoinnerVo ) )。
{
apiresponseapiresponse=newapiresponse (
查询itemNo捕获进程的示例
proccontrolvoproccontrolvo=codelibrarydao.queryprocconfig (item no );
if(procControlVo==null )
{
returnewapiresponse (responsecodeenums.stream _ no _ exist );
}
listtaskcontrolvolist=proccontrolvo.gettaskcontrolvolist (;
taskcontrolvolist.sort ((taskcontrolvoh 1,TaskControlVoh2)-h1.getSortNo ) )。
.comPareto(H2.getsortno ) );
teratorittask=taskcontrolvolist.iterator (;
//初始化内部数据表
string data no=taskmanagerserv.initdata (item no,skey,innerVo );
//循环地依次执行流程任务
StringtaskNo=null;
while(ittask.Hasnext ) )
{
taskcontrolvotaskcontrolvo=it task.next (;
stringtaskclassname=taskcontrolvo.gettasklassname (;
stringtaskitemno=taskcontrolvo.gettaskcode (;
string taskname=taskcontrolvo.get taskname (;
特里
{
//初始化任务
taskno=taskmanagerserv.init task (task item no,dataNo,innerVo );
//执行任务
taskservtaskserv=(taskserv ) springfactory.getbean ) class.forname (task class name );
taskserv.init(taskno,objVo );
taskanswervotaskanwservo=task serv.deal (taskno,objVo );
//判断任务的执行结果
API response=taskanwservo.getapiresponse (;
if (string utils.equals (responsecodeenums.success.get status (,apiResponse.getStatus ) ) )
{
//完成任务
logger.info ('=============taskexecutesuccess! taskCode={},taskName={},status={},msg={},nextTask={} '
、taskItemNo、taskName、apiResponse.getStatus (、apiResponse.getMessage )、taskAnwserVo.isNextTask );
taskmanagerserv.fintask(taskno,apiResponse.getMessage ) );
}
else
{
//异常任务
logger.info ('=============taskexecuteerror! taskCode={},taskName={},status={},msg={},nextTask={} '
、taskItemNo、taskName、apiResponse.getStatus (、apiResponse.getMessage )、taskAnwserVo.isNextTask );
taskmanagerserv.errtask(taskno,apiResponse.getMessage ) );
}
//判断流程是否继续
if (! taskAnwserVo.isNextTask (
{
布雷克;
}
}
catch(Exceptione )
{
//异常任务
字符串错误msg=getstack trace (e;
taskmanagerserv.errtask(taskno,errorMsg );
logger.error ('==============executetaskerror! skey={},taskControlVo={},errorMsg={} ',skey,taskControlVo,errorMsg;
//响应异常
returnewapiresponse (responsecodeenums.flow _ error;
}
}
if (string utils.equals (responsecodeenums.success.get status (,apiResponse.getStatus ) ) )
{
//归档完成过程
taskmanagerserv.findata(datano );
}
returnapiResponse;
}
SpringFactory实现类/**
*Createdby
*/
@Component
publicclasspringfactoryimplementsapplicationcontextaware
{
私有应用程序上下文;
@Override
publicvoidsetapplicationcontext (应用程序上下文应用程序上下文) throwsBeansException
{
if (spring factory.application context==空)
{
spring factory.application context=application context;
}
}
获取//APP上下文
publicstaticapplicationcontextgetapplicationcontext ()
{
returnapplicationContext;
}
用name获取Bean。
publicstaticobjectgetbean (字符串名称) )。
{
returngetApplicationContext (
. getbean(name;
}
在类中获取Bean。
publicstatictgetbean (类分类)。
{
returngetApplicationContext (
. getbean(Clazz );
}
返回name和Clazz指定的Bean
publicstatictgetbean (字符串名称,类分类)。
{
returngetApplicationContext (
. getbean(name,clazz );
}
}
以上就是这篇文章的全部。 需要了解其他java常见问题和解决方法的合作伙伴应继续关注此网站。
请阅读: