Explorar el Código

加入线程池配置和pdf锁

wangliang hace 11 meses
padre
commit
21c0c1d0d4

+ 36 - 27
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncCreatePdfTemplateService.java

@@ -14,6 +14,8 @@ import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
+import com.qmth.teachcloud.mark.enums.LockType;
+import com.qmth.teachcloud.mark.lock.LockService;
 import org.apache.commons.collections4.CollectionUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,35 +51,42 @@ public class AsyncCreatePdfTemplateService extends AsyncCreateTaskTemplete {
      */
     @Override
     public Result createPdf(TBTaskPdf tbTaskPdf, CallbackCreatePdf callbackCreatePdf) {
-        StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
-        SystemConstant.addSummary(stringJoinerSummary, "开始处理PDF文件生成数据");
-        TBTaskPdfService tbTaskPdfService = SpringContextHolder.getBean(TBTaskPdfService.class);
-        // 任务状态为进行中,直接结束
-        if (TaskStatusEnum.RUNNING.equals(tbTaskPdf.getStatus())) {
-            return ResultUtil.ok();
-        }
-        tbTaskPdf.setStatus(TaskStatusEnum.RUNNING);
-        tbTaskPdfService.updateById(tbTaskPdf);
-        List<ExamDetailCourse> examDetailCourseList = null;
-        try {
-            PdfTaskLogicService pdfTaskLogicService = SpringContextHolder.getBean(PdfTaskLogicService.class);
-            examDetailCourseList = pdfTaskLogicService.executeCreatePdfLogic(tbTaskPdf, stringJoinerSummary);
-            tbTaskPdf.setResult(TaskResultEnum.SUCCESS);
-        } catch (Exception e) {
-            SystemConstant.addSummary(stringJoinerSummary, "数据处理完成且发生异常。异常信息为[" + e.getMessage() + "]");
-            tbTaskPdf.setResult(TaskResultEnum.ERROR);
-        } finally {
-            tbTaskPdf.setStatus(TaskStatusEnum.FINISH);
-            tbTaskPdf.setSummary(stringJoinerSummary.toString());
-            tbTaskPdf.setUpdateTime(System.currentTimeMillis());
-            tbTaskPdfService.updateById(tbTaskPdf);
+        LockService lockService = SpringContextHolder.getBean(LockService.class);
+        if (lockService.trylock(LockType.CREATE_PDF, tbTaskPdf.getId())) {
+            try {
+                StringJoiner stringJoinerSummary = new StringJoiner("\n").add(MessageFormat.format("{0}{1}{2}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), BEGIN_TITLE, OBJ_TITLE));
+                SystemConstant.addSummary(stringJoinerSummary, "开始处理PDF文件生成数据");
+                TBTaskPdfService tbTaskPdfService = SpringContextHolder.getBean(TBTaskPdfService.class);
+                // 任务状态为进行中,直接结束
+                if (TaskStatusEnum.RUNNING.equals(tbTaskPdf.getStatus())) {
+                    return ResultUtil.ok();
+                }
+                tbTaskPdf.setStatus(TaskStatusEnum.RUNNING);
+                tbTaskPdfService.updateById(tbTaskPdf);
+                List<ExamDetailCourse> examDetailCourseList = null;
+                try {
+                    PdfTaskLogicService pdfTaskLogicService = SpringContextHolder.getBean(PdfTaskLogicService.class);
+                    examDetailCourseList = pdfTaskLogicService.executeCreatePdfLogic(tbTaskPdf, stringJoinerSummary);
+                    tbTaskPdf.setResult(TaskResultEnum.SUCCESS);
+                } catch (Exception e) {
+                    SystemConstant.addSummary(stringJoinerSummary, "数据处理完成且发生异常。异常信息为[" + e.getMessage() + "]");
+                    tbTaskPdf.setResult(TaskResultEnum.ERROR);
+                } finally {
+                    tbTaskPdf.setStatus(TaskStatusEnum.FINISH);
+                    tbTaskPdf.setSummary(stringJoinerSummary.toString());
+                    tbTaskPdf.setUpdateTime(System.currentTimeMillis());
+                    tbTaskPdfService.updateById(tbTaskPdf);
 
-            if (TaskResultEnum.SUCCESS.equals(tbTaskPdf.getResult()) && CollectionUtils.isNotEmpty(examDetailCourseList)) {
-                ExamTaskWholeService examTaskWholeService = SpringContextHolder.getBean(ExamTaskWholeService.class);
-                for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
-                    // 生成合并文件
-                    examTaskWholeService.checkAndCreateTask(tbTaskPdf.getExamId(), examDetailCourse.getCourseId(), examDetailCourse.getPaperNumber());
+                    if (TaskResultEnum.SUCCESS.equals(tbTaskPdf.getResult()) && CollectionUtils.isNotEmpty(examDetailCourseList)) {
+                        ExamTaskWholeService examTaskWholeService = SpringContextHolder.getBean(ExamTaskWholeService.class);
+                        for (ExamDetailCourse examDetailCourse : examDetailCourseList) {
+                            // 生成合并文件
+                            examTaskWholeService.checkAndCreateTask(tbTaskPdf.getExamId(), examDetailCourse.getCourseId(), examDetailCourse.getPaperNumber());
+                        }
+                    }
                 }
+            } finally {
+                lockService.unlock(LockType.CREATE_PDF, tbTaskPdf.getId());
             }
         }
         return ResultUtil.ok(tbTaskPdf);

+ 15 - 12
distributed-print/src/main/resources/application.properties

@@ -12,14 +12,14 @@ spring.application.name=teachcloud
 #\u6570\u636E\u6E90\u914D\u7F6E
 db.host=localhost
 db.port=3306
-db.name=teachcloud-3.4.0
+db.name=teachcloud-v3.4.0-test
 db.username=root
-db.password=12345678
+db.password=123456789
 
 #redis\u6570\u636E\u6E90\u914D\u7F6E
 com.qmth.redis.host=127.0.0.1
 com.qmth.redis.port=6379
-com.qmth.redis.db=6
+com.qmth.redis.db=4
 #com.qmth.redis.password=
 
 #mysql\u914D\u7F6E
@@ -47,20 +47,20 @@ spring.activiti.check-process-definitions=false
 #full\uFF1A\u4FDD\u5B58\u5386\u53F2\u6570\u636E\u7684\u6700\u9AD8\u7EA7\u522B\uFF0C\u9664\u4E86\u4F1A\u4FDD\u5B58audit\u7EA7\u522B\u7684\u6570\u636E\u5916\uFF0C\u8FD8\u4F1A\u4FDD\u5B58\u5176\u4ED6\u5168\u90E8\u6D41\u7A0B\u76F8\u5173\u7684\u7EC6\u8282\u6570\u636E\uFF0C\u5305\u62EC\u4E00\u4E9B\u6D41\u7A0B\u53C2\u6570\u7B49\u3002
 spring.activiti.history-level=audit
 
-#com.qmth.fss.private.config=oss://key:secret@teachcloud-dps-dev-private.oss-api.qmth.com.cn
-#com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-private
-#com.qmth.fss.public.config=oss://key:secret@teachcloud-dps-dev-public.oss-api.qmth.com.cn
-#com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-public
+com.qmth.fss.private.config=oss://key:secret@teachcloud-dps-dev-private.oss-api.qmth.com.cn
+com.qmth.fss.private.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-private
+com.qmth.fss.public.config=oss://key:secret@teachcloud-dps-dev-public.oss-api.qmth.com.cn
+com.qmth.fss.public.server=https://oss-file.qmth.com.cn/teachcloud-dps-dev-public
 
 #com.qmth.fss.public.config=../static/
 #com.qmth.fss.public.server=/static/
 #com.qmth.fss.private.config=../static/
 #com.qmth.fss.private.server=/static/
 
-com.qmth.fss.public.config=/Users/xiaofei/qmth/temporary/zxzk/file-temp/
-com.qmth.fss.public.server=/file-temp/
-com.qmth.fss.private.config=/Users/xiaofei/qmth/temporary/zxzk/pdf-temp/
-com.qmth.fss.private.server=/pdf-temp/
+#com.qmth.fss.public.config=/Users/king/Downloads/file-temp
+#com.qmth.fss.public.server=/file-temp/
+#com.qmth.fss.private.config=/Users/king/Downloads/pdf-temp
+#com.qmth.fss.private.server=/pdf-temp/
 
 #\u7CFB\u7EDF\u914D\u7F6E
 sys.config.oss=true
@@ -88,13 +88,16 @@ spring.jackson.time-zone=GMT+8
 
 #\u65E5\u5FD7\u914D\u7F6E
 com.qmth.logging.root-level=info
-com.qmth.logging.file-path=/Users/xiaofei/qmth/temporary/zxzk/log/distributed-print.log
+com.qmth.logging.file-path=/Users/king/Downloads/distributed-print.log
 
 #com.qmth.solar.access-key=274f823e5f59410f8b3bb6edcd8e2b6e
 #com.qmth.solar.access-secret=y7AO6W0TOdTF8HpWBwGHbp3wfIHsmUKr
 
 com.qmth.sms.server=https://solar.qmth.com.cn
 
+#============================================================================
+# \u914D\u7F6EJobStore
+#============================================================================
 spring.quartz.job-store-type=jdbc
 spring.quartz.jdbc.initialize-schema=never
 # JobDataMaps\u662F\u5426\u90FD\u4E3AString\u7C7B\u578B\uFF0C\u9ED8\u8BA4false

+ 2 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/threadPool/MyThreadPool.java

@@ -53,8 +53,8 @@ public class MyThreadPool extends ThreadPoolTaskExecutor {
             log.info("cpuNum:{}", cpuNum);
             threadPoolTaskExecutor = new MyThreadPool();
             if (!customThreadPoolCoreSize && cpuNum > 0) {
-                threadPoolTaskExecutor.setCorePoolSize(cpuNum);//核心线程数
-                threadPoolTaskExecutor.setMaxPoolSize(cpuNum * 2);//最大线程数
+                threadPoolTaskExecutor.setCorePoolSize(Math.abs(cpuNum / 2));//核心线程数
+                threadPoolTaskExecutor.setMaxPoolSize(threadPoolTaskExecutor.getCorePoolSize() * 2);//最大线程数
             } else {
                 threadPoolTaskExecutor.setCorePoolSize(threadPoolCoreSize);//核心线程数
                 threadPoolTaskExecutor.setMaxPoolSize(threadPoolCoreSize * 2);//最大线程数

+ 1 - 0
teachcloud-mark/src/main/java/com/qmth/teachcloud/mark/enums/LockType.java

@@ -19,6 +19,7 @@ public enum LockType {
 	QUESTION_DELETE("question_delete"),
 	CARD_SAVE("card_save"),
 	INIT_MARK_DATA("init_mark_data"),
+    CREATE_PDF("create_pdf"),
 	;
 
 	private String name;

+ 0 - 1
teachcloud-task/src/main/java/com/qmth/teachcloud/task/job/service/impl/JobServiceImpl.java

@@ -206,7 +206,6 @@ public class JobServiceImpl implements JobService {
         for (TBTaskPdf tbTaskPdf : tbTaskPdfList) {
             asyncCreatePdfTemplateService.createPdf(tbTaskPdf, null);
         }
-
     }
 
     /**