| package com.doumee.config.quartz; | 
|   | 
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
| import com.doumee.biz.system.SystemJobSnippetTriggerBiz; | 
| import com.doumee.biz.system.dto.TriggerJobSnippetDTO; | 
| import com.doumee.core.constants.Constants; | 
| import com.doumee.dao.system.SystemJobSnippetMapper; | 
| import com.doumee.dao.system.model.SystemJobSnippet; | 
| import lombok.extern.slf4j.Slf4j; | 
| import org.quartz.DisallowConcurrentExecution; | 
| import org.quartz.JobExecutionContext; | 
| import org.quartz.JobExecutionException; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.scheduling.quartz.QuartzJobBean; | 
| import org.springframework.stereotype.Component; | 
|   | 
| import java.util.List; | 
|   | 
| /** | 
|  * 分片任务扫描器 | 
|  * 该处理器每1秒扫描SYSTEM_JOB_SNIPPET表,执行还未执行的分片任务 | 
|  * @author  dm | 
|  * @since 2025/03/31 16:44 | 
|  */ | 
| @Slf4j | 
| @Component | 
| @DisallowConcurrentExecution | 
| public class SnippetScanner extends QuartzJobBean { | 
|   | 
|     @Autowired | 
|     private SystemJobSnippetTriggerBiz systemJobSnippetTriggerBiz; | 
|   | 
|     @Autowired | 
|     private SystemJobSnippetMapper systemJobSnippetMapper; | 
|   | 
|     @Override | 
|     protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { | 
|         try { | 
|             log.trace("Snippet scanner started."); | 
|             // 1. 查询所有未执行的分片任务 | 
|             List<SystemJobSnippet> snippets = systemJobSnippetMapper.selectList(new LambdaQueryWrapper<SystemJobSnippet>() | 
|                     .select(SystemJobSnippet::getId) | 
|                     .eq(SystemJobSnippet::getStatus, Constants.Job.JobStatus.READY.getCode()) | 
|                     .orderByAsc(SystemJobSnippet::getCreateTime) | 
|             ); | 
|             // 2. 循环执行 | 
|             for (SystemJobSnippet snippet : snippets) { | 
|                 TriggerJobSnippetDTO dto = new TriggerJobSnippetDTO(); | 
|                 dto.setId(snippet.getId()); | 
|                 dto.setTriggerType(Constants.Job.TriggerType.SYSTEM.getCode()); | 
|                 systemJobSnippetTriggerBiz.trigger(dto); | 
|             } | 
|         } catch (Exception e) { | 
|             throw new JobExecutionException("EVA: trigger snippet throw an exception", e); | 
|         } finally { | 
|             log.trace("Snippet scanner execute completed."); | 
|         } | 
|     } | 
| } |