优化实例模型缓存加载逻辑

This commit is contained in:
hubin 2025-01-05 13:44:51 +08:00
parent 97dbc4cdac
commit bab7b1cc56
3 changed files with 18 additions and 4 deletions

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -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