From 21a11797655cd9197414a87d170a3f9ccc957fff Mon Sep 17 00:00:00 2001 From: luke Date: Wed, 21 May 2025 18:37:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E8=87=AA=E5=8A=A8=E5=AF=BC?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/schedule/ImportScheduler.java | 47 +++++++++++++++---- .../infrastructure/config/DynamicConfig.java | 7 +++ 2 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/doc/parser/domain/schedule/ImportScheduler.java b/src/main/java/com/doc/parser/domain/schedule/ImportScheduler.java index c147c51..9306766 100644 --- a/src/main/java/com/doc/parser/domain/schedule/ImportScheduler.java +++ b/src/main/java/com/doc/parser/domain/schedule/ImportScheduler.java @@ -1,40 +1,66 @@ package com.doc.parser.domain.schedule; import com.doc.parser.domain.iface.DocumentImporter; +import com.doc.parser.infrastructure.config.DynamicConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.scheduling.Trigger; +import org.springframework.scheduling.TriggerContext; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; +import org.springframework.scheduling.support.CronTrigger; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.util.Date; import java.util.List; /** - * @author Luke.ye - * @date 2025/5/21 14:09 + * 动态定时任务调度器(读取 cron 表达式来自 Nacos) */ @Component -public class ImportScheduler { +@EnableScheduling +public class ImportScheduler implements SchedulingConfigurer { private static final Logger logger = LoggerFactory.getLogger(ImportScheduler.class); @Value("${import.schedule.enabled:true}") private boolean scheduleEnabled; - private final List importers; + @Resource + private List importers; - public ImportScheduler(List importers) { - this.importers = importers; + @Resource + private DynamicConfig dynamicConfig; + + @Override + public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { + taskRegistrar.addTriggerTask( + this::doImportTask, + new Trigger() { + @Override + public Date nextExecutionTime(TriggerContext triggerContext) { + String cron = dynamicConfig.getImportScheduleCron(); + try { + return new CronTrigger(cron).nextExecutionTime(triggerContext); + } catch (Exception e) { + logger.error("动态 cron 表达式解析失败: {},使用默认值 0 0 * * * *", cron, e); + return new CronTrigger("0 0 * * * *").nextExecutionTime(triggerContext); + } + } + } + ); } - @Scheduled(cron = "${import.schedule.cron:0 0 * * * *}") - public void scheduledImport() { + private void doImportTask() { if (!scheduleEnabled) { logger.info("导入定时任务已禁用"); return; } - logger.info("开始执行定时导入任务"); + logger.info("开始执行动态定时导入任务"); for (DocumentImporter importer : importers) { try { logger.info("执行导入器: {}", importer.getType()); @@ -47,3 +73,4 @@ public class ImportScheduler { } } + diff --git a/src/main/java/com/doc/parser/infrastructure/config/DynamicConfig.java b/src/main/java/com/doc/parser/infrastructure/config/DynamicConfig.java index 46488f3..2e6ac56 100644 --- a/src/main/java/com/doc/parser/infrastructure/config/DynamicConfig.java +++ b/src/main/java/com/doc/parser/infrastructure/config/DynamicConfig.java @@ -15,7 +15,14 @@ public class DynamicConfig { @Value("${micro.saas.doc.parser.recordMsgBody:Y}") private String recordMsgBody; + @Value("${import.schedule.cron:0 0 * * * *}") + private String importScheduleCron; + public String getRecordMsgBody() { return recordMsgBody; } + + public String getImportScheduleCron() { + return importScheduleCron; + } }