优化实例模型缓存加载逻辑
This commit is contained in:
parent
97dbc4cdac
commit
bab7b1cc56
@ -6,11 +6,14 @@ package com.aizuda.bpm.engine.entity;
|
||||
|
||||
import com.aizuda.bpm.engine.FlowConstants;
|
||||
import com.aizuda.bpm.engine.ProcessModelCache;
|
||||
import com.aizuda.bpm.engine.core.FlowLongContext;
|
||||
import com.aizuda.bpm.engine.model.ProcessModel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
/**
|
||||
* 扩展流程实例实体类
|
||||
@ -69,4 +72,13 @@ public class FlwExtInstance implements ProcessModelCache, Serializable {
|
||||
public String modelCacheKey() {
|
||||
return FlowConstants.processInstanceCacheKey + this.id;
|
||||
}
|
||||
|
||||
public static ProcessModel cacheProcessModelById(Long id, Supplier<ProcessModel> supplier) {
|
||||
ProcessModel processModel = FlowLongContext.parseProcessModel(null, FlowConstants.processInstanceCacheKey + id, false);
|
||||
if (null == processModel && null != supplier) {
|
||||
processModel = supplier.get();
|
||||
}
|
||||
return processModel;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -47,7 +47,7 @@ public class DefaultProcessModelParser implements ProcessModelParser {
|
||||
if (null != cacheKey) {
|
||||
FlowCache flowCache = this.getFlowCache();
|
||||
ProcessModel processModel = flowCache.get(cacheKey);
|
||||
if (null == processModel || redeploy) {
|
||||
if (null != content && (null == processModel || redeploy)) {
|
||||
processModel = parseProcessModel(content);
|
||||
flowCache.put(cacheKey, processModel);
|
||||
}
|
||||
|
@ -99,9 +99,11 @@ public class RuntimeServiceImpl implements RuntimeService {
|
||||
*/
|
||||
@Override
|
||||
public ProcessModel getProcessModelByInstanceId(Long instanceId) {
|
||||
FlwExtInstance flwExtInstance = extInstanceDao.selectById(instanceId);
|
||||
Assert.isNull(flwExtInstance, "The process instance model does not exist.");
|
||||
return flwExtInstance.model();
|
||||
return FlwExtInstance.cacheProcessModelById(instanceId, () -> {
|
||||
FlwExtInstance fri = extInstanceDao.selectById(instanceId);
|
||||
Assert.isNull(fri, "The process instance model does not exist.");
|
||||
return fri.model(true);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user