From 087ffca4b35243b40659f25cfd5c1284f2d520d6 Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期五, 28 二月 2025 14:41:12 +0800
Subject: [PATCH] MATLAB-开始加载项目已发布的jar matlab.bak-file-path 命名错误

---
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java                               |   10 ++++++++--
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/common/utils/MatlabUtils.java          |   30 ++++++++++++++++++++----------
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlProjectServiceImpl.java |    9 ++++-----
 iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlModelServiceImpl.java   |    6 +++---
 iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml                                             |    2 +-
 5 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java
index e080cbe..5907aea 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/ModelServiceApplication.java
@@ -1,5 +1,6 @@
 package com.iailab;
 
+import com.iailab.module.model.matlab.common.utils.MatlabUtils;
 import com.iailab.module.model.mpk.common.MdkConstant;
 import com.iailab.module.model.mpk.common.utils.DllUtils;
 import iail.mdk.model.common.Environment;
@@ -23,6 +24,8 @@
 
     @Value("${mpk.bak-file-path}")
     private String mpkBakFilePath;
+    @Value("${matlab.bak-file-path}")
+    private String matlabBakFilePath;
 
     @PostConstruct
     void init() {
@@ -47,9 +50,12 @@
 
         //加载项目已发布的dll和jar
         try {
-            log.info("************开始加载项目已发布的dll和jar**************");
+            log.info("************MDK-开始加载项目已发布的dll和jar**************");
             DllUtils.loadProjectPublish(mpkBakFilePath + File.separator + MdkConstant.PROJECT_PUBLISH);
-            log.info("************加载项目已发布的dll和jar结束**************");
+            log.info("************MDK-加载项目已发布的dll和jar结束**************");
+            log.info("************MATLAB-开始加载项目已发布的jar**************");
+            MatlabUtils.loadProjectPublish(matlabBakFilePath + File.separator + MdkConstant.PROJECT_PUBLISH);
+            log.info("************MATLAB-加载项目已发布的jar结束**************");
         } catch (Exception e) {
             e.printStackTrace();
             log.error("加载项目已发布的dll和jar失败");
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/common/utils/MatlabUtils.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/common/utils/MatlabUtils.java
index 13281e3..4ffbcd2 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/common/utils/MatlabUtils.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/common/utils/MatlabUtils.java
@@ -11,6 +11,7 @@
 import com.mathworks.toolbox.javabuilder.*;
 import com.mathworks.toolbox.javabuilder.internal.MWFunctionSignature;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.CollectionUtils;
 
 import java.io.File;
 import java.io.IOException;
@@ -183,7 +184,7 @@
     }
 
     /**
-     * @description: 项目启动加载已发布的dll和jar
+     * @description: 项目启动加载已发布的jar
      * @author: dzd
      * @date: 2024/10/10 11:58
      **/
@@ -192,23 +193,32 @@
         if (dir.exists() && dir.isDirectory()) {
             File[] files = dir.listFiles();
             if (null != files && files.length > 0) {
+                HashMap<String,List<String>> projectIdJarFilePaths = new HashMap<>();
                 for (File file : files) {
                     String fileName = file.getName();
                     if (fileName.endsWith(".jar")) {
                         String[] split = fileName.split(MdkConstant.SPLIT);
                         String projectId = split[0];
-
-                        URLClassLoader urlClassLoader = null;
-                        try {
-                            // 加载新的jar
-                            urlClassLoader = loadJar(projectId,file.getAbsolutePath());
-                        } catch (Exception e) {
-                            throw new RuntimeException("加载jar异常", e);
+                        if (projectId != null) {
+                            if (projectIdJarFilePaths.containsKey(projectId)) {
+                                projectIdJarFilePaths.get(projectId).add(file.getAbsolutePath());
+                            } else {
+                                projectIdJarFilePaths.put(projectId,new ArrayList<String>(){{add(file.getAbsolutePath());}});
+                            }
                         }
-                        // 成功后加入缓存
-                        addClassLoaderCache(projectId, urlClassLoader);
                     }
                 }
+
+                try {
+                    if (!CollectionUtils.isEmpty(projectIdJarFilePaths)) {
+                        for (Map.Entry<String, List<String>> entry : projectIdJarFilePaths.entrySet()) {
+                            // 加载新的jar
+                            loadJar(entry.getKey(),entry.getValue().toArray(new String[0]));
+                        }
+                    }
+                } catch (Exception e) {
+                    throw new RuntimeException("加载jar异常", e);
+                }
             }
         }
 
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlModelServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlModelServiceImpl.java
index 2211a31..d8c9d42 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlModelServiceImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlModelServiceImpl.java
@@ -55,8 +55,8 @@
 @Service
 public class MlModelServiceImpl extends BaseServiceImpl<MlModelDao, MlModelEntity> implements MlModelService {
 
-    @Value("${mablab.bak-file-path}")
-    private String mablabBakFilePath;
+    @Value("${matlab.bak-file-path}")
+    private String matlabBakFilePath;
 
     @Autowired
     private MlModelMethodService mlModelMethodService;
@@ -276,7 +276,7 @@
     private String getMatlabTenantBakFilePath() {
         Long tenantId = TenantContextHolder.getTenantId();
         // 备份文件夹 租户隔离
-        String matlabTenantBakFilePath = mablabBakFilePath + File.separator + tenantId;
+        String matlabTenantBakFilePath = matlabBakFilePath + File.separator + tenantId;
         File bakDir = new File(matlabTenantBakFilePath);
         if (!bakDir.exists()) {
             bakDir.mkdirs();
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlProjectServiceImpl.java b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlProjectServiceImpl.java
index ca70a63..31bf5a4 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlProjectServiceImpl.java
+++ b/iailab-module-model/iailab-module-model-biz/src/main/java/com/iailab/module/model/matlab/service/impl/MlProjectServiceImpl.java
@@ -18,7 +18,6 @@
 import com.iailab.module.model.matlab.service.MlProjectModelService;
 import com.iailab.module.model.matlab.service.MlProjectService;
 import com.iailab.module.model.mpk.common.MdkConstant;
-import com.iailab.module.model.mpk.common.utils.DllUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -45,8 +44,8 @@
     @Autowired
     MlModelDao mlModelDao;
 
-    @Value("${mablab.bak-file-path}")
-    private String mablabBakFilePath;
+    @Value("${matlab.bak-file-path}")
+    private String matlabBakFilePath;
 
     @Override
     public PageData<MlProjectDTO> page(Map<String, Object> params) {
@@ -149,7 +148,7 @@
 
         // 卸载上次发布的classloader 并删除发布备份文件
         MatlabUtils.removeClassLoaderCache(projectId);
-        MatlabUtils.removeOldFile(mablabBakFilePath + File.separator + MdkConstant.PROJECT_PUBLISH,projectId);
+        MatlabUtils.removeOldFile(matlabBakFilePath + File.separator + MdkConstant.PROJECT_PUBLISH,projectId);
 
         // 查询关联模型
         List<MlModelDTO> list = mlProjectModelService.getProjectModel(params);
@@ -157,7 +156,7 @@
         String[] jarFilePaths = new String[list.size()];
         for (int i = 0; i < list.size(); i++) {
             MlModelDTO mlModelDTO = list.get(i);
-            String jarFilePath = mablabBakFilePath + File.separator + MdkConstant.PROJECT_PUBLISH + File.separator + projectId + MdkConstant.SPLIT + mlModelDTO.getId() + ".jar";
+            String jarFilePath = matlabBakFilePath + File.separator + MdkConstant.PROJECT_PUBLISH + File.separator + projectId + MdkConstant.SPLIT + mlModelDTO.getId() + ".jar";
             FileUtil.copy(mlModelDTO.getModelFilePath(),jarFilePath,true);
             jarFilePaths[i] = jarFilePath;
         }
diff --git a/iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml b/iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml
index 487f2b7..dd79178 100644
--- a/iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml
+++ b/iailab-module-model/iailab-module-model-biz/src/main/resources/application-dev.yaml
@@ -52,7 +52,7 @@
   bak-file-path: D:\DLUT\mpkBakFile
   bak-resources: D:\DLUT\mpkResources
   model-file-path: D:\DLUT\MDK\Model\miail\
-mablab:
+matlab:
   bak-file-path: D:\DLUT\matlabBakFile
 
 influx-db:

--
Gitblit v1.9.3