java中的工作流要怎样实现_java工作流开发要怎么实现?
Java工作流的应用在目前十分广泛,能够熟练的实现工作流也是一种本事,本篇文章就让小编带你了解下其中的实现关键。
我们知道,工作流的实现主要依靠反射机制,想要实现它,首先我们先来创建一张工作流表
创建一张工作流表
如:主键 | 工作流Code | 工作流内容
其中工作流内容为Json格式
工作流内容{
"procCode": "OPS"
, "procName": "c端补齐(乘客信息补全)"
, "taskControlVoList": [
{
"sortNo": "10"
, "taskCode": "OPC"
, "taskName": "检查对应的订单信息是否存在"
, "tasklassName": "com.xf.flow.service.impl.OrderPeople10ServImpl"
}
, {
"sortNo": "20"
, "taskCode": "OPD"
, "taskName": "乘客数据库落库"
, "tasklassName": "com.xf.flow.service.impl.OrderPeople20ServImpl"
}
, {
"sortNo": "90"
, "taskCode": "RSP"
, "taskName": "响应消息"
, "tasklassName": "com.xf.flow.service.impl.ApiResponseServImpl"
}
]
}
aava代码现根据工作流的Code 获取当前的工作流
jsonStr ————>JsonObject————>获取taskControlVoList
java的工作流代码@Override
public ApiResponse deal(String itemNo, Object objVo, String skey, InnerVo innerVo)
{
ApiResponse apiResponse = new ApiResponse();
//查询itemNo获取流程实例
ProcControlVo procControlVo = codeLibraryDao.queryProcConfig(itemNo);
if (procControlVo == null)
{
return new ApiResponse(ResponseCodeEnums.stream_no_exist);
}
List taskControlVoList = procControlVo.getTaskControlVoList();
taskControlVoList.sort((TaskControlVo h1, TaskControlVo h2) - > h1.getSortNo()
.compareTo(h2.getSortNo()));
Iterator itTask = taskControlVoList.iterator();
//初始化内部数据表
String dataNo = taskManagerServ.initData(itemNo, skey, innerVo);
//循环依次执行流程任务
String taskNo = null;
while (itTask.hasNext())
{
TaskControlVo taskControlVo = itTask.next();
String taskClassName = taskControlVo.getTasklassName();
String taskItemNo = taskControlVo.getTaskCode();
String taskName = taskControlVo.getTaskName();
try
{
//初始化任务
taskNo = taskManagerServ.initTask(taskItemNo, dataNo, innerVo);
//执行任务
TaskServ taskServ = (TaskServ) SpringFactory.getBean(Class.forName(taskClassName));
taskServ.init(taskNo, objVo);
TaskAnswerVo taskAnwserVo = taskServ.deal(taskNo, objVo);
//判断任务执行结果
apiResponse = taskAnwserVo.getApiResponse();
if (StringUtils.equals(ResponseCodeEnums.success.getStatus(), apiResponse.getStatus()))
{
//完成任务
logger.info("==========>>>>> task execute success !!! taskCode={}, taskName={}, status={}, msg={}, nextTask={}"
, taskItemNo, taskName, apiResponse.getStatus(), apiResponse.getMessage(), taskAnwserVo.isNextTask());
taskManagerServ.finTask(taskNo, apiResponse.getMessage());
}
else
{
//异常任务
logger.info("==========>>>>> task execute error !!! taskCode={}, taskName={}, status={}, msg={}, nextTask={}"
, taskItemNo, taskName, apiResponse.getStatus(), apiResponse.getMessage(), taskAnwserVo.isNextTask());
taskManagerServ.errTask(taskNo, apiResponse.getMessage());
}
//判断流程是否继续
if (!taskAnwserVo.isNextTask())
{
break;
}
}
catch (Exception e)
{
//异常任务
String errorMsg = getStackTrace(e);
taskManagerServ.errTask(taskNo, errorMsg);
logger.error("==========>>>>> Execute Task Error!!! skey={}, taskControlVo={}, errorMsg={}", skey, taskControlVo, errorMsg);
//响应异常
return new ApiResponse(ResponseCodeEnums.flow_error);
}
}
if (StringUtils.equals(ResponseCodeEnums.success.getStatus(), apiResponse.getStatus()))
{
//归档完成流程
taskManagerServ.finData(dataNo);
}
return apiResponse;
}
SpringFactory实现类/**
* Created by
*/
@Component
public class SpringFactory implements ApplicationContextAware
{
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
{
if (SpringFactory.applicationContext == null)
{
SpringFactory.applicationContext = applicationContext;
}
}
//获取applicationContext
public static ApplicationContext getApplicationContext()
{
return applicationContext;
}
//通过name获取 Bean.
public static Object getBean(String name)
{
return getApplicationContext()
.getBean(name);
}
//通过class获取Bean.
public static T getBean(Class clazz)
{
return getApplicationContext()
.getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
public static T getBean(String name, Class clazz)
{
return getApplicationContext()
.getBean(name, clazz);
}
}
以上就是本篇文章的所有内容,需要了解其他java常见问题及解决方法的小伙伴们请持续关注本网站吧。
推荐阅读:
java中的工作流要怎样实现_java工作流开发要怎么实现?相关推荐
- 【源码及课件分享】Java实战项目之酒店客房管理系统_Java项目开发_Java项目实战
Java实战项目又双叒叕来咯~小伙伴们请查收~酒店客房管理系统![源码及课件分享]Java实战项目之酒店客房管理系统_Java项目开发_Java项目实战_Java毕业设计https://www.bil ...
- java中基本字节输出流类是_java中基本输入输出流的解释
网络程序的很大一部分是简单的输入输出,即从一个系统向另一个系统移动字节.字节就是字节,在很大程度上,读服务器发送的数据与读取文件没什么不同:向客户传送数据与写入一个文件也没有什么区别. Java中输入 ...
- java中char是几个字节_Java中char占用几个字节
在讨论这个问题之前,我们需要先区分unicode和UTF. unicode :统一的字符编号,仅仅提供字符与编号间映射.符号数量在不断增加,已超百万.详细:[https://zh.wikipedia. ...
- java中的常用的文件流_Java 基础(四)| IO 流之使用文件流的正确姿势
image.png 一.什么是 IO 流? 想象一个场景:我们在电脑上编辑文件,可以保存到硬盘上,也可以拷贝到 U 盘中.那这个看似简单的过程,背后其实是数据的传输. 数据的传输,也就是数据的流动.既 ...
- java中什么时候不能用泛型_java中泛型的正确使用姿势
image.png 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.利用好泛型,在系统架构中是一把利器. 泛型类 先看一个例子,restful架构中,需要定义api接口返回 ...
- java中的进制输出转换_Java I/O : Java中的进制详解
作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...
- java 中的finally你知多少_Java 处理异常 9 个最佳实践,你知道几个?
1. 在Finally中清理资源或者使用Try-With-Resource语句使用Finally Java 7的Try-With-Resource语句 2. 给出准确的异常处理信息 3. 记录你所指定 ...
- JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解
java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...
- java中四种常用的引用类型_java中四种引用类型
JDK.1.2 之后,Java 对引用的概念进行了扩充,将引用分为了:强引用(Strong Reference).软引用(Soft Reference).弱引用(Weak Reference).虚引用 ...
- java中int和integer的区别_Java异常中throw和throws关键字的区别
Java中常常弄混的两个关键字,throw和throws,它们有什么区别呢?如何记忆他们,而不至于出错呢? throw和throws 区别 throws:出现在方法的签名中,声明当前方法可能抛出的所有 ...
最新文章
- 【重磅】斯坦福李飞飞《注意力与Transformer》总结,84页ppt开放下载!
- python 密度 语音_Python+sklearn机器学习应该了解的33个基本概念
- python冒泡排序_5种python方法实现冒泡排序可视化:Bubble Sort Visualizer
- OpenCV的轮廓查找和填充
- 微软的100道算法面试题(一)
- Java入门需掌握的30个基本概念[转]
- 基于ABP落地领域驱动设计-04.领域服务和应用服务的最佳实践和原则
- python变量和字符串
- 使用Docker和Azure Kubernetes服务将ASP.NET核心应用程序容器化
- [小程序]_ELVE_小程序开发(1)
- 2021-09-06LS是交替最小二乘(alternating least squares)的简称,用交替最小二乘求解的一个协同推荐算法。
- 硅谷华人码农成语大全
- Unity3D中使用Projector生成阴影
- 微信直播监控服务器,HTML5微信网页调用监控直播代码接口文档v3.02
- JavaSE实现桌面屏幕下雪功能
- DataOps: A New Discipline 数据治理的下一步
- SpringBoot整合liquibase
- 荒野白茶特点及口感如何
- MySQL的几种join方法
- [18调剂]北方民族大学2018年硕士研究生调剂公告