diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java index 6ab8bd58..c1bfa662 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/scheduling/ExperimentInstanceStatusTask.java @@ -32,7 +32,7 @@ public class ExperimentInstanceStatusTask { private List experimentIds = new ArrayList<>(); @Scheduled(cron = "0/30 * * * * ?") // 每30S执行一次 public void executeExperimentInsStatus() throws IOException { - // 查到所有非终止态的实例 + // 首先查到所有非终止态的实验实例 List experimentInsList = experimentInsService.queryByExperimentIsNotTerminated(); // 去argo查询状态 List updateList = new ArrayList<>(); @@ -47,8 +47,12 @@ public class ExperimentInstanceStatusTask { } if (!StringUtils.equals(oldStatus,experimentIns.getStatus())){ experimentIns.setUpdateTime(new Date()); - experimentIds.add(experimentIns.getExperimentId()); + synchronized (experimentIds) { + experimentIds.add(experimentIns.getExperimentId()); // 线程安全的添加操作 + } updateList.add(experimentIns); + + } experimentInsDao.update(experimentIns); } @@ -63,8 +67,10 @@ public class ExperimentInstanceStatusTask { if (experimentIds.size()==0){ return; } - List updateexperiments = new ArrayList<>(); + // 存储需要更新的实验对象列表 + List updateExperiments = new ArrayList<>(); for (Integer experimentId : experimentIds){ + // 获取当前实验的所有实例列表 List insList = experimentInsService.getByExperimentId(experimentId); List statusList = new ArrayList(); // 更新实验状态列表 @@ -73,15 +79,18 @@ public class ExperimentInstanceStatusTask { } String subStatus = statusList.toString().substring(1, statusList.toString().length() - 1); Experiment experiment = experimentDao.queryById(experimentId); + // 如果实验状态列表发生变化,则更新实验对象,并加入到需要更新的列表中 if (!StringUtils.equals(subStatus,experiment.getStatusList())){ experiment.setStatusList(subStatus); - updateexperiments.add(experiment); + updateExperiments.add(experiment); } } - if (updateexperiments.size() > 0) { - experimentDao.insertOrUpdateBatch(updateexperiments); - for (int index = 0; index < updateexperiments.size(); index++) { - experimentIds.remove(index); + if (!updateExperiments.isEmpty()) { + experimentDao.insertOrUpdateBatch(updateExperiments); + for (int index = 0; index < updateExperiments.size(); index++) { + synchronized (experimentIds) { + experimentIds.remove(index); // 线程安全的删除操作 + } } } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java index 04fd3dcc..25d2e7c0 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java @@ -361,6 +361,7 @@ public class DatasetServiceImpl implements DatasetService { // Now we know there's another dataset with the same name Field[] fields = Dataset.class.getDeclaredFields(); + for (Field field : fields) { field.setAccessible(true); // Make private fields accessible