定时自动导入

This commit is contained in:
luke 2025-05-21 18:37:54 +08:00
parent 78cabcb107
commit 21a1179765
2 changed files with 44 additions and 10 deletions

View File

@ -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<DocumentImporter> importers;
@Resource
private List<DocumentImporter> importers;
public ImportScheduler(List<DocumentImporter> 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 {
}
}

View File

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