spring工作流实现

编程

1、执行器:

bean定义:

public class ProcessContext implements Serializable {

private String code;//工作组模版编码

private long beginTime = 0L;//开始时间

private long endTime = 0L;//结束时间

private long timeout = 0L;//超时时间

private Boolean needBreak = false;//是否中断

private boolean isSuccess = true;//执行是否成功

private int errorCode = 0;//错误编码

private String errorMsg = "";//错误信息

public Boolean getNeedBreak() {

return this.needBreak;

}

public ProcessContext setNeedBreak(Boolean needBreak) {

this.needBreak = needBreak;

return this;

}

public boolean isSuccess() {

return this.isSuccess;

}

public ProcessContext setSuccess(boolean success) {

this.isSuccess = success;

return this;

}

public String getErrorMsg() {

return this.errorMsg;

}

public ProcessContext setErrorMsg(String errorMsg) {

this.errorMsg = errorMsg;

this.needBreak = true;

this.isSuccess = false;

return this;

}

public ProcessContext() {

}

public String getCode() {

return this.code;

}

public long getBeginTime() {

return this.beginTime;

}

public long getEndTime() {

return this.endTime;

}

public long getTimeout() {

return this.timeout;

}

public int getErrorCode() {

return this.errorCode;

}

public void setCode(String code) {

this.code = code;

}

public void setBeginTime(long beginTime) {

this.beginTime = beginTime;

}

public void setEndTime(long endTime) {

this.endTime = endTime;

}

public void setTimeout(long timeout) {

this.timeout = timeout;

}

public void setErrorCode(int errorCode) {

this.errorCode = errorCode;

}

public boolean equals(Object o) {

if (o == this) {

return true;

} else if (!(o instanceof ProcessContext)) {

return false;

} else {

ProcessContext other = (ProcessContext)o;

if (!other.canEqual(this)) {

return false;

} else {

Object this$code = this.getCode();

Object other$code = other.getCode();

if (this$code == null) {

if (other$code != null) {

return false;

}

} else if (!this$code.equals(other$code)) {

return false;

}

if (this.getBeginTime() != other.getBeginTime()) {

return false;

} else if (this.getEndTime() != other.getEndTime()) {

return false;

} else if (this.getTimeout() != other.getTimeout()) {

return false;

} else {

label56: {

Object this$needBreak = this.getNeedBreak();

Object other$needBreak = other.getNeedBreak();

if (this$needBreak == null) {

if (other$needBreak == null) {

break label56;

}

} else if (this$needBreak.equals(other$needBreak)) {

break label56;

}

return false;

}

if (this.isSuccess() != other.isSuccess()) {

return false;

} else if (this.getErrorCode() != other.getErrorCode()) {

return false;

} else {

Object this$errorMsg = this.getErrorMsg();

Object other$errorMsg = other.getErrorMsg();

if (this$errorMsg == null) {

if (other$errorMsg == null) {

return true;

}

} else if (this$errorMsg.equals(other$errorMsg)) {

return true;

}

return false;

}

}

}

}

}

protected boolean canEqual(Object other) {

return other instanceof ProcessContext;

}

public int hashCode() {

int PRIME = true;

int result = 1;

Object $code = this.getCode();

int result = result * 59 + ($code == null ? 43 : $code.hashCode());

long $beginTime = this.getBeginTime();

result = result * 59 + (int)($beginTime >>> 32 ^ $beginTime);

long $endTime = this.getEndTime();

result = result * 59 + (int)($endTime >>> 32 ^ $endTime);

long $timeout = this.getTimeout();

result = result * 59 + (int)($timeout >>> 32 ^ $timeout);

Object $needBreak = this.getNeedBreak();

result = result * 59 + ($needBreak == null ? 43 : $needBreak.hashCode());

result = result * 59 + (this.isSuccess() ? 79 : 97);

result = result * 59 + this.getErrorCode();

Object $errorMsg = this.getErrorMsg();

result = result * 59 + ($errorMsg == null ? 43 : $errorMsg.hashCode());

return result;

}

public String toString() {

return "ProcessContext(code=" + this.getCode() + ", beginTime=" + this.getBeginTime() + ", endTime=" + this.getEndTime() + ", timeout=" + this.getTimeout() + ", needBreak=" + this.getNeedBreak() + ", isSuccess=" + this.isSuccess() + ", errorCode=" + this.getErrorCode() + ", errorMsg=" + this.getErrorMsg() + ")";

}

}

异常类

package com.fordeal.camel.proctrl.exception;

public class ProctrlException extends Exception {

private Integer code;

public ProctrlException() {

}

public ProctrlException(String message, Integer code) {

super(message);

this.code = code;

}

public ProctrlException(String message) {

super(message);

}

public ProctrlException(String message, Throwable cause) {

super(message, cause);

}

public ProctrlException(Throwable cause) {

super(cause);

}

protected ProctrlException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {

super(message, cause, enableSuppression, writableStackTrace);

}

public Integer getCode() {

return this.code;

}

}

接口类:

public interface ProcessController {

void process(ProcessContext var1) throws ProctrlException;

}

实现类:

public class ProcessControllerImpl implements ProcessController {

private Logger logger = LoggerFactory.getLogger(ProcessController.class);

private Map<String, ProcessTemplate> templateConfig = null;

public ProcessControllerImpl() {

}

public void process(ProcessContext context) throws ProctrlException {

if (context == null) {

throw new ProctrlException(ErrorCode.CONTEXT_IS_NULL.getCode());

} else {

String businessCode = context.getCode();

if (StringUtils.isEmpty(businessCode)) {

throw new ProctrlException(ErrorCode.BUSINESSCODE_IS_NULL.getCode());

} else {

ProcessTemplate processTemplate = (ProcessTemplate)this.templateConfig.get(businessCode);

if (processTemplate == null) {

throw new ProctrlException(ErrorCode.PROCESSTEMPLATE_IS_NULL.getCode());

} else {

List<StepAction> actionList = processTemplate.getProcessConfig();

if (actionList != null && actionList.size() != 0) {

Iterator var5 = actionList.iterator();

while(var5.hasNext()) {

StepAction action = (StepAction)var5.next();

long stime = System.currentTimeMillis();

boolean var21 = false;

long etime;

long diffTime;

label115: {

try {

var21 = true;

action.process(context);

if (context.getNeedBreak()) {

var21 = false;

break label115;

}

var21 = false;

} catch (ProctrlException var22) {

this.logger.warn("process_action={} happened e={}, context={}", new Object[]{action.getClass().getSimpleName(), var22.getMessage(), JSONObject.toJSONString(context)});

context.setErrorMsg(var22.getMessage());

throw var22;

} catch (Exception var23) {

this.logger.error("exception_process_action={} happened e={}, context={}", new Object[]{action.getClass().getSimpleName(), ExceptionUtils.getStackTrace(var23), JSONObject.toJSONString(context)});

context.setErrorMsg(var23.getMessage());

throw new ProctrlException(var23);

} finally {

if (var21) {

long var14 = System.currentTimeMillis();

long diffTime = var14 - stime;

if (diffTime > 200L) {

this.logger.warn("slow_process action:{} is slow,cost time:{}", action.getClass().getSimpleName(), diffTime);

}

}

}

etime = System.currentTimeMillis();

diffTime = etime - stime;

if (diffTime > 200L) {

this.logger.warn("slow_process action:{} is slow,cost time:{}", action.getClass().getSimpleName(), diffTime);

}

continue;

}

etime = System.currentTimeMillis();

diffTime = etime - stime;

if (diffTime > 200L) {

this.logger.warn("slow_process action:{} is slow,cost time:{}", action.getClass().getSimpleName(), diffTime);

}

break;

}

} else {

throw new ProctrlException(ErrorCode.PROCESSCONFIG_IS_NULL.getCode());

}

}

}

}

}

public Map<String, ProcessTemplate> getTemplateConfig() {

return this.templateConfig;

}

public void setTemplateConfig(Map<String, ProcessTemplate> templateConfig) {

this.templateConfig = templateConfig;

}

}

public class ProcessTemplate {

private List<StepAction> processConfig = null;

public ProcessTemplate() {

}

public List<StepAction> getProcessConfig() {

return this.processConfig;

}

public void setProcessConfig(List<StepAction> processConfig) {

this.processConfig = processConfig;

}

public boolean equals(Object o) {

if (o == this) {

return true;

} else if (!(o instanceof ProcessTemplate)) {

return false;

} else {

ProcessTemplate other = (ProcessTemplate)o;

if (!other.canEqual(this)) {

return false;

} else {

Object this$processConfig = this.getProcessConfig();

Object other$processConfig = other.getProcessConfig();

if (this$processConfig == null) {

if (other$processConfig != null) {

return false;

}

} else if (!this$processConfig.equals(other$processConfig)) {

return false;

}

return true;

}

}

}

protected boolean canEqual(Object other) {

return other instanceof ProcessTemplate;

}

public int hashCode() {

int PRIME = true;

int result = 1;

Object $processConfig = this.getProcessConfig();

int result = result * 59 + ($processConfig == null ? 43 : $processConfig.hashCode());

return result;

}

public String toString() {

return "ProcessTemplate(processConfig=" + this.getProcessConfig() + ")";

}

}

2、配置文件:spring-workflow.xml

<bean id="procContrl" class="**.ProcessControllerImpl">

<property name="templateConfig">

<map>

<entry key="test-til" value-ref="mytpl"/>

</map>

</property>

</bean>

<bean id="mytpl" class="***.ProcessTemplate">

<property name="processConfig">

<list>

<ref bean="1Action"/>

<ref bean="2Action"/>

<ref bean="3Action"/>

</list>

</property>

</bean>

 

以上是 spring工作流实现 的全部内容, 来源链接: utcz.com/z/514151.html

回到顶部