feat(sj_1.0.0): 优化客户端group配置和enabled加载顺序
1. 优化类名handler -> 优化handle 2. 客户EnableSnailJob#group配置可以不强制指定,支持在配置文件中配置,具体见注解 3. 是否开启enabled配置,调整为用户的配置> 默认配置
This commit is contained in:
		
							parent
							
								
									01127611fa
								
							
						
					
					
						commit
						08cf9e9909
					
				| @ -33,6 +33,20 @@ import java.lang.annotation.*; | |||||||
| @Import(SnailJobClientsRegistrar.class) | @Import(SnailJobClientsRegistrar.class) | ||||||
| public @interface EnableSnailJob { | public @interface EnableSnailJob { | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * 请在服务端提前配置好组,并设置在这里 | ||||||
|  |      * group的配置支持注解和配置文件两种形式 | ||||||
|  |      * 配置顺序为注解 > yml | ||||||
|  |      * 即: 如果注解内不配置默认取环境变量中的group配置 | ||||||
|  |      * 比如: | ||||||
|  |      * <p> | ||||||
|  |      * snail-job.group = snail_job_demo_group | ||||||
|  |      * </p> | ||||||
|  |      * | ||||||
|  |      * @return group | ||||||
|  |      */ | ||||||
|  |     String group() default ""; | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * 控制多个Aop的执行顺序, |      * 控制多个Aop的执行顺序, | ||||||
|      * 需要注意的是这里顺序要比事务的Aop要提前 |      * 需要注意的是这里顺序要比事务的Aop要提前 | ||||||
|  | |||||||
| @ -10,6 +10,7 @@ import org.springframework.beans.factory.config.BeanDefinition; | |||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; | ||||||
| import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; | ||||||
| import org.springframework.context.annotation.*; | import org.springframework.context.annotation.*; | ||||||
|  | import org.springframework.core.Ordered; | ||||||
| import org.springframework.core.env.StandardEnvironment; | import org.springframework.core.env.StandardEnvironment; | ||||||
| 
 | 
 | ||||||
| @Configuration | @Configuration | ||||||
| @ -29,7 +30,10 @@ public class SnailJobClientRetryCoreAutoConfiguration { | |||||||
|     @Role(BeanDefinition.ROLE_INFRASTRUCTURE) |     @Role(BeanDefinition.ROLE_INFRASTRUCTURE) | ||||||
|     public MethodInterceptor snailJobInterceptor(StandardEnvironment standardEnvironment, |     public MethodInterceptor snailJobInterceptor(StandardEnvironment standardEnvironment, | ||||||
|                                                  @Lazy RetryStrategy localRetryStrategies) { |                                                  @Lazy RetryStrategy localRetryStrategies) { | ||||||
|         return new SnailRetryInterceptor(standardEnvironment, localRetryStrategies); |         Integer order = standardEnvironment | ||||||
|  |             .getProperty(SnailJobClientsRegistrar.AOP_ORDER_CONFIG, Integer.class, Ordered.HIGHEST_PRECEDENCE); | ||||||
|  | 
 | ||||||
|  |         return new SnailRetryInterceptor(order, localRetryStrategies); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| package com.aizuda.snailjob.client.starter; | package com.aizuda.snailjob.client.starter; | ||||||
| 
 | 
 | ||||||
|  | import cn.hutool.core.util.StrUtil; | ||||||
| import org.springframework.beans.factory.support.BeanDefinitionRegistry; | import org.springframework.beans.factory.support.BeanDefinitionRegistry; | ||||||
| import org.springframework.context.EnvironmentAware; | import org.springframework.context.EnvironmentAware; | ||||||
| import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; | import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; | ||||||
| @ -8,6 +9,7 @@ import org.springframework.core.env.StandardEnvironment; | |||||||
| import org.springframework.core.type.AnnotationMetadata; | import org.springframework.core.type.AnnotationMetadata; | ||||||
| 
 | 
 | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
|  | import java.util.Objects; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * Snail Job 客户端注册器 |  * Snail Job 客户端注册器 | ||||||
| @ -17,21 +19,37 @@ import java.util.Map; | |||||||
|  */ |  */ | ||||||
| public class SnailJobClientsRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware { | public class SnailJobClientsRegistrar implements ImportBeanDefinitionRegistrar, EnvironmentAware { | ||||||
| 
 | 
 | ||||||
|  |     private static final String ENABLED_CONFIG = "snail-job.enabled"; | ||||||
|  |     private static final String GROUP_CONFIG = "snail-job.group"; | ||||||
|  |     protected static final String AOP_ORDER_CONFIG = "snail-job.aop.order"; | ||||||
|  | 
 | ||||||
|  |     protected static final String GROUP_ATTR = "group"; | ||||||
|  |     protected static final String ORDER_ATTR = "order"; | ||||||
|     private StandardEnvironment standardEnvironment; |     private StandardEnvironment standardEnvironment; | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { |     public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { | ||||||
|         Map<String, Object> attrs = importingClassMetadata.getAnnotationAttributes(EnableSnailJob.class.getName()); |         Map<String, Object> attrs = importingClassMetadata.getAnnotationAttributes(EnableSnailJob.class.getName()); | ||||||
|         Map<String, Object> systemEnvironment = standardEnvironment.getSystemProperties(); |         Map<String, Object> systemEnvironment = standardEnvironment.getSystemProperties(); | ||||||
|         systemEnvironment.put("snail-job.aop.order", attrs.get("order")); |         systemEnvironment.put(AOP_ORDER_CONFIG, attrs.get(ORDER_ATTR)); | ||||||
|  | 
 | ||||||
|  |         Object group = attrs.get(GROUP_ATTR); | ||||||
|  |         // 如果注解内不配置默认取环境变量中的group配置 | ||||||
|  |         if (Objects.nonNull(group) && StrUtil.isNotBlank((CharSequence) group)) { | ||||||
|  |             systemEnvironment.put(GROUP_CONFIG, group); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public void setEnvironment(Environment environment) { |     public void setEnvironment(Environment env) { | ||||||
|         StandardEnvironment standardEnvironment = (StandardEnvironment) environment; |         this.standardEnvironment = (StandardEnvironment) env; | ||||||
|         this.standardEnvironment = standardEnvironment; |  | ||||||
|         Map<String, Object> systemEnvironment = standardEnvironment.getSystemProperties(); |         Map<String, Object> systemEnvironment = standardEnvironment.getSystemProperties(); | ||||||
|  |         // 若是用户需要自定义enabled的值,那么以用户的为主 | ||||||
|  |         if (Objects.nonNull(standardEnvironment.getProperty(ENABLED_CONFIG))) { | ||||||
|  |             return; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // 添加了 EnableSnailJob 默认就是开启,无需手动配置 |         // 添加了 EnableSnailJob 默认就是开启,无需手动配置 | ||||||
|         systemEnvironment.put("snail-job.enabled", true); |         systemEnvironment.put(ENABLED_CONFIG, Boolean.TRUE); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -54,12 +54,10 @@ public class SnailRetryInterceptor implements MethodInterceptor, AfterAdvice, Se | |||||||
|                     "> 时间:{}  \n" + |                     "> 时间:{}  \n" + | ||||||
|                     "> 异常:{}  \n"; |                     "> 异常:{}  \n"; | ||||||
| 
 | 
 | ||||||
|     private final StandardEnvironment standardEnvironment; |  | ||||||
|     private final RetryStrategy retryStrategy; |     private final RetryStrategy retryStrategy; | ||||||
| 
 |     private final int order; | ||||||
|     public SnailRetryInterceptor(StandardEnvironment standardEnvironment, |     public SnailRetryInterceptor(int order, RetryStrategy localRetryStrategies) { | ||||||
|                                  RetryStrategy localRetryStrategies) { |         this.order = order; | ||||||
|         this.standardEnvironment = standardEnvironment; |  | ||||||
|         this.retryStrategy = localRetryStrategies; |         this.retryStrategy = localRetryStrategies; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -271,9 +269,7 @@ public class SnailRetryInterceptor implements MethodInterceptor, AfterAdvice, Se | |||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public int getOrder() { |     public int getOrder() { | ||||||
|         String order = standardEnvironment |         return order; | ||||||
|                 .getProperty("snail-job.aop.order", String.valueOf(Ordered.HIGHEST_PRECEDENCE)); |  | ||||||
|         return Integer.parseInt(order); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -15,6 +15,7 @@ import com.aizuda.snailjob.template.datasource.persistence.mapper.ServerNodeMapp | |||||||
| import com.aizuda.snailjob.template.datasource.persistence.po.GroupConfig; | import com.aizuda.snailjob.template.datasource.persistence.po.GroupConfig; | ||||||
| import com.aizuda.snailjob.template.datasource.persistence.po.ServerNode; | import com.aizuda.snailjob.template.datasource.persistence.po.ServerNode; | ||||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||||
|  | import lombok.RequiredArgsConstructor; | ||||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
| @ -38,23 +39,17 @@ import java.util.stream.Collectors; | |||||||
|  * @since 1.6.0 |  * @since 1.6.0 | ||||||
|  */ |  */ | ||||||
| @Component | @Component | ||||||
| @Slf4j | @RequiredArgsConstructor | ||||||
| public class ServerNodeBalance implements Lifecycle, Runnable { | public class ServerNodeBalance implements Lifecycle, Runnable { | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * 延迟10s为了尽可能保障集群节点都启动完成在进行rebalance |      * 延迟10s为了尽可能保障集群节点都启动完成在进行rebalance | ||||||
|      */ |      */ | ||||||
|     public static final Long INITIAL_DELAY = 10L; |     public static final Long INITIAL_DELAY = 10L; | ||||||
|  |     private final ServerNodeMapper serverNodeMapper; | ||||||
|  |     private final SystemProperties systemProperties; | ||||||
| 
 | 
 | ||||||
|     @Autowired |  | ||||||
|     protected AccessTemplate accessTemplate; |  | ||||||
|     private Thread thread = null; |     private Thread thread = null; | ||||||
| 
 |  | ||||||
|     @Autowired |  | ||||||
|     protected ServerNodeMapper serverNodeMapper; |  | ||||||
|     @Autowired |  | ||||||
|     protected SystemProperties systemProperties; |  | ||||||
| 
 |  | ||||||
|     private List<Integer> bucketList; |     private List<Integer> bucketList; | ||||||
| 
 | 
 | ||||||
|     public void doBalance() { |     public void doBalance() { | ||||||
| @ -79,7 +74,7 @@ public class ServerNodeBalance implements Lifecycle, Runnable { | |||||||
|             List<Integer> allocate = new AllocateMessageQueueAveragely() |             List<Integer> allocate = new AllocateMessageQueueAveragely() | ||||||
|                     .allocate(ServerRegister.CURRENT_CID, bucketList, new ArrayList<>(podIpSet)); |                     .allocate(ServerRegister.CURRENT_CID, bucketList, new ArrayList<>(podIpSet)); | ||||||
| 
 | 
 | ||||||
|             // 重新覆盖本地分配的组信息 |             // 重新覆盖本地分配的bucket | ||||||
|             DistributeInstance.INSTANCE.setConsumerBucket(allocate); |             DistributeInstance.INSTANCE.setConsumerBucket(allocate); | ||||||
| 
 | 
 | ||||||
|             SnailJobLog.LOCAL.info("rebalance complete. allocate:[{}]", allocate); |             SnailJobLog.LOCAL.info("rebalance complete. allocate:[{}]", allocate); | ||||||
|  | |||||||
| @ -7,9 +7,9 @@ import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; | |||||||
|  * @date 2023-10-02 09:34:00 |  * @date 2023-10-02 09:34:00 | ||||||
|  * @since 2.4.0 |  * @since 2.4.0 | ||||||
|  */ |  */ | ||||||
| public interface JobPrePareHandler { | public interface JobPrepareHandler { | ||||||
| 
 | 
 | ||||||
|     boolean matches(Integer status); |     boolean matches(Integer status); | ||||||
| 
 | 
 | ||||||
|     void handler(JobTaskPrepareDTO jobPrepareDTO); |     void handle(JobTaskPrepareDTO jobPrepareDTO); | ||||||
| } | } | ||||||
| @ -89,7 +89,7 @@ public class JobExecutorActor extends AbstractActor { | |||||||
| 
 | 
 | ||||||
|             } catch (Exception e) { |             } catch (Exception e) { | ||||||
|                 SnailJobLog.LOCAL.error("job executor exception. [{}]", taskExecute, e); |                 SnailJobLog.LOCAL.error("job executor exception. [{}]", taskExecute, e); | ||||||
|                 handlerTaskBatch(taskExecute, JobTaskBatchStatusEnum.FAIL.getStatus(), JobOperationReasonEnum.TASK_EXECUTION_ERROR.getReason()); |                 handleTaskBatch(taskExecute, JobTaskBatchStatusEnum.FAIL.getStatus(), JobOperationReasonEnum.TASK_EXECUTION_ERROR.getReason()); | ||||||
|                 SpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(taskExecute.getTaskBatchId())); |                 SpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(taskExecute.getTaskBatchId())); | ||||||
|             } finally { |             } finally { | ||||||
|                 getContext().stop(getSelf()); |                 getContext().stop(getSelf()); | ||||||
| @ -126,7 +126,7 @@ public class JobExecutorActor extends AbstractActor { | |||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             // 更新状态 |             // 更新状态 | ||||||
|             handlerTaskBatch(taskExecute, taskStatus, operationReason); |             handleTaskBatch(taskExecute, taskStatus, operationReason); | ||||||
| 
 | 
 | ||||||
|             // 不是运行中的,不需要生产任务 |             // 不是运行中的,不需要生产任务 | ||||||
|             if (taskStatus != JobTaskBatchStatusEnum.RUNNING.getStatus()) { |             if (taskStatus != JobTaskBatchStatusEnum.RUNNING.getStatus()) { | ||||||
| @ -167,7 +167,7 @@ public class JobExecutorActor extends AbstractActor { | |||||||
|                     } |                     } | ||||||
| 
 | 
 | ||||||
|                     //方法内容 |                     //方法内容 | ||||||
|                     doHandlerResidentTask(job, taskExecute); |                     doHandleResidentTask(job, taskExecute); | ||||||
|                 } |                 } | ||||||
|             }); |             }); | ||||||
|         } |         } | ||||||
| @ -185,7 +185,7 @@ public class JobExecutorActor extends AbstractActor { | |||||||
|         return context; |         return context; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void handlerTaskBatch(TaskExecuteDTO taskExecute, int taskStatus, int operationReason) { |     private void handleTaskBatch(TaskExecuteDTO taskExecute, int taskStatus, int operationReason) { | ||||||
| 
 | 
 | ||||||
|         JobTaskBatch jobTaskBatch = new JobTaskBatch(); |         JobTaskBatch jobTaskBatch = new JobTaskBatch(); | ||||||
|         jobTaskBatch.setId(taskExecute.getTaskBatchId()); |         jobTaskBatch.setId(taskExecute.getTaskBatchId()); | ||||||
| @ -201,7 +201,7 @@ public class JobExecutorActor extends AbstractActor { | |||||||
| 
 | 
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void doHandlerResidentTask(Job job, TaskExecuteDTO taskExecuteDTO) { |     private void doHandleResidentTask(Job job, TaskExecuteDTO taskExecuteDTO) { | ||||||
|         if (Objects.isNull(job) |         if (Objects.isNull(job) | ||||||
|                 || JobTaskExecutorSceneEnum.MANUAL_JOB.getType().equals(taskExecuteDTO.getTaskExecutorScene()) |                 || JobTaskExecutorSceneEnum.MANUAL_JOB.getType().equals(taskExecuteDTO.getTaskExecutorScene()) | ||||||
|                 || JobTaskExecutorSceneEnum.AUTO_WORKFLOW.getType().equals(taskExecuteDTO.getTaskExecutorScene()) |                 || JobTaskExecutorSceneEnum.AUTO_WORKFLOW.getType().equals(taskExecuteDTO.getTaskExecutorScene()) | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ import com.aizuda.snailjob.server.common.akka.ActorGenerator; | |||||||
| import com.aizuda.snailjob.server.common.enums.JobTaskExecutorSceneEnum; | import com.aizuda.snailjob.server.common.enums.JobTaskExecutorSceneEnum; | ||||||
| import com.aizuda.snailjob.server.common.enums.SyetemTaskTypeEnum; | import com.aizuda.snailjob.server.common.enums.SyetemTaskTypeEnum; | ||||||
| import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; | import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; | ||||||
| import com.aizuda.snailjob.server.job.task.support.JobPrePareHandler; | import com.aizuda.snailjob.server.job.task.support.JobPrepareHandler; | ||||||
| import com.aizuda.snailjob.server.job.task.support.prepare.job.TerminalJobPrepareHandler; | import com.aizuda.snailjob.server.job.task.support.prepare.job.TerminalJobPrepareHandler; | ||||||
| import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskBatchMapper; | import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskBatchMapper; | ||||||
| import com.aizuda.snailjob.template.datasource.persistence.po.JobTaskBatch; | import com.aizuda.snailjob.template.datasource.persistence.po.JobTaskBatch; | ||||||
| @ -37,7 +37,7 @@ public class JobTaskPrepareActor extends AbstractActor { | |||||||
|     @Autowired |     @Autowired | ||||||
|     private JobTaskBatchMapper jobTaskBatchMapper; |     private JobTaskBatchMapper jobTaskBatchMapper; | ||||||
|     @Autowired |     @Autowired | ||||||
|     private List<JobPrePareHandler> prePareHandlers; |     private List<JobPrepareHandler> prepareHandlers; | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public Receive createReceive() { |     public Receive createReceive() { | ||||||
| @ -73,7 +73,7 @@ public class JobTaskPrepareActor extends AbstractActor { | |||||||
|         // 说明所以任务已经完成 |         // 说明所以任务已经完成 | ||||||
|         if (CollectionUtils.isEmpty(notCompleteJobTaskBatchList)) { |         if (CollectionUtils.isEmpty(notCompleteJobTaskBatchList)) { | ||||||
|             TerminalJobPrepareHandler terminalJobPrepareHandler = SpringContext.getBeanByType(TerminalJobPrepareHandler.class); |             TerminalJobPrepareHandler terminalJobPrepareHandler = SpringContext.getBeanByType(TerminalJobPrepareHandler.class); | ||||||
|             terminalJobPrepareHandler.handler(prepare); |             terminalJobPrepareHandler.handle(prepare); | ||||||
|         } else { |         } else { | ||||||
| 
 | 
 | ||||||
|             boolean onlyTimeoutCheck = false; |             boolean onlyTimeoutCheck = false; | ||||||
| @ -83,9 +83,9 @@ public class JobTaskPrepareActor extends AbstractActor { | |||||||
|                 prepare.setWorkflowTaskBatchId(prepare.getWorkflowTaskBatchId()); |                 prepare.setWorkflowTaskBatchId(prepare.getWorkflowTaskBatchId()); | ||||||
|                 prepare.setWorkflowNodeId(jobTaskBatch.getWorkflowNodeId()); |                 prepare.setWorkflowNodeId(jobTaskBatch.getWorkflowNodeId()); | ||||||
|                 prepare.setOnlyTimeoutCheck(onlyTimeoutCheck); |                 prepare.setOnlyTimeoutCheck(onlyTimeoutCheck); | ||||||
|                 for (JobPrePareHandler prePareHandler : prePareHandlers) { |                 for (JobPrepareHandler prepareHandler : prepareHandlers) { | ||||||
|                     if (prePareHandler.matches(jobTaskBatch.getTaskBatchStatus())) { |                     if (prepareHandler.matches(jobTaskBatch.getTaskBatchStatus())) { | ||||||
|                         prePareHandler.handler(prepare); |                         prepareHandler.handle(prepare); | ||||||
|                         break; |                         break; | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  | |||||||
| @ -1,20 +0,0 @@ | |||||||
| package com.aizuda.snailjob.server.job.task.support.prepare.job; |  | ||||||
| 
 |  | ||||||
| import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; |  | ||||||
| import com.aizuda.snailjob.server.job.task.support.JobPrePareHandler; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * @author opensnail |  | ||||||
|  * @date 2023-10-02 09:57:55 |  | ||||||
|  * @since 2.4.0 |  | ||||||
|  */ |  | ||||||
| public abstract class AbstractJobPrePareHandler implements JobPrePareHandler { |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public void handler(JobTaskPrepareDTO jobPrepareDTO) { |  | ||||||
| 
 |  | ||||||
|         doHandler(jobPrepareDTO); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     protected abstract void doHandler(JobTaskPrepareDTO jobPrepareDTO); |  | ||||||
| } |  | ||||||
| @ -0,0 +1,20 @@ | |||||||
|  | package com.aizuda.snailjob.server.job.task.support.prepare.job; | ||||||
|  | 
 | ||||||
|  | import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; | ||||||
|  | import com.aizuda.snailjob.server.job.task.support.JobPrepareHandler; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * @author opensnail | ||||||
|  |  * @date 2023-10-02 09:57:55 | ||||||
|  |  * @since 2.4.0 | ||||||
|  |  */ | ||||||
|  | public abstract class AbstractJobPrepareHandler implements JobPrepareHandler { | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public void handle(JobTaskPrepareDTO jobPrepareDTO) { | ||||||
|  | 
 | ||||||
|  |         doHandle(jobPrepareDTO); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     protected abstract void doHandle(JobTaskPrepareDTO jobPrepareDTO); | ||||||
|  | } | ||||||
| @ -30,7 +30,7 @@ import org.springframework.stereotype.Component; | |||||||
|  */ |  */ | ||||||
| @Component | @Component | ||||||
| @Slf4j | @Slf4j | ||||||
| public class RunningJobPrepareHandler extends AbstractJobPrePareHandler { | public class RunningJobPrepareHandler extends AbstractJobPrepareHandler { | ||||||
| 
 | 
 | ||||||
|     @Autowired |     @Autowired | ||||||
|     private JobTaskBatchHandler jobTaskBatchHandler; |     private JobTaskBatchHandler jobTaskBatchHandler; | ||||||
| @ -41,7 +41,7 @@ public class RunningJobPrepareHandler extends AbstractJobPrePareHandler { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void doHandler(JobTaskPrepareDTO prepare) { |     protected void doHandle(JobTaskPrepareDTO prepare) { | ||||||
|         log.debug("存在运行中的任务. prepare:[{}]", JsonUtil.toJsonString(prepare)); |         log.debug("存在运行中的任务. prepare:[{}]", JsonUtil.toJsonString(prepare)); | ||||||
| 
 | 
 | ||||||
|         // 若存在所有的任务都是完成,但是批次上的状态为运行中,则是并发导致的未把批次状态变成为终态,此处做一次兜底处理 |         // 若存在所有的任务都是完成,但是批次上的状态为运行中,则是并发导致的未把批次状态变成为终态,此处做一次兜底处理 | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ import java.util.Objects; | |||||||
| @Order(Ordered.HIGHEST_PRECEDENCE) | @Order(Ordered.HIGHEST_PRECEDENCE) | ||||||
| @Component | @Component | ||||||
| @Slf4j | @Slf4j | ||||||
| public class TerminalJobPrepareHandler extends AbstractJobPrePareHandler { | public class TerminalJobPrepareHandler extends AbstractJobPrepareHandler { | ||||||
| 
 | 
 | ||||||
|     @Autowired |     @Autowired | ||||||
|     private JobTaskBatchGenerator jobTaskBatchGenerator; |     private JobTaskBatchGenerator jobTaskBatchGenerator; | ||||||
| @ -33,7 +33,7 @@ public class TerminalJobPrepareHandler extends AbstractJobPrePareHandler { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void doHandler(JobTaskPrepareDTO jobPrepareDTO) { |     protected void doHandle(JobTaskPrepareDTO jobPrepareDTO) { | ||||||
|         log.debug("无处理中的数据. jobId:[{}]", jobPrepareDTO.getJobId()); |         log.debug("无处理中的数据. jobId:[{}]", jobPrepareDTO.getJobId()); | ||||||
| 
 | 
 | ||||||
|         // 生成任务批次 |         // 生成任务批次 | ||||||
|  | |||||||
| @ -21,7 +21,7 @@ import java.time.Duration; | |||||||
|  */ |  */ | ||||||
| @Component | @Component | ||||||
| @Slf4j | @Slf4j | ||||||
| public class WaitJobPrepareHandler extends AbstractJobPrePareHandler { | public class WaitJobPrepareHandler extends AbstractJobPrepareHandler { | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public boolean matches(Integer status) { |     public boolean matches(Integer status) { | ||||||
| @ -29,7 +29,7 @@ public class WaitJobPrepareHandler extends AbstractJobPrePareHandler { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     protected void doHandler(JobTaskPrepareDTO jobPrepareDTO) { |     protected void doHandle(JobTaskPrepareDTO jobPrepareDTO) { | ||||||
|         log.debug("存在待处理任务. taskBatchId:[{}]", jobPrepareDTO.getTaskBatchId()); |         log.debug("存在待处理任务. taskBatchId:[{}]", jobPrepareDTO.getTaskBatchId()); | ||||||
| 
 | 
 | ||||||
|         // 若时间轮中数据不存在则重新加入 |         // 若时间轮中数据不存在则重新加入 | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ import com.aizuda.snailjob.server.common.strategy.WaitStrategies; | |||||||
| import com.aizuda.snailjob.server.common.util.CronUtils; | import com.aizuda.snailjob.server.common.util.CronUtils; | ||||||
| import com.aizuda.snailjob.server.common.util.DateUtils; | import com.aizuda.snailjob.server.common.util.DateUtils; | ||||||
| import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; | import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; | ||||||
| import com.aizuda.snailjob.server.job.task.support.JobPrePareHandler; | import com.aizuda.snailjob.server.job.task.support.JobPrepareHandler; | ||||||
| import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; | import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; | ||||||
| import com.aizuda.snailjob.server.job.task.support.cache.ResidentTaskCache; | import com.aizuda.snailjob.server.job.task.support.cache.ResidentTaskCache; | ||||||
| import com.aizuda.snailjob.server.web.model.base.PageResult; | import com.aizuda.snailjob.server.web.model.base.PageResult; | ||||||
| @ -54,7 +54,7 @@ public class JobServiceImpl implements JobService { | |||||||
|     private final SystemProperties systemProperties; |     private final SystemProperties systemProperties; | ||||||
|     private final JobMapper jobMapper; |     private final JobMapper jobMapper; | ||||||
|     @Lazy |     @Lazy | ||||||
|     private final JobPrePareHandler terminalJobPrepareHandler; |     private final JobPrepareHandler terminalJobPrepareHandler; | ||||||
|     private final AccessTemplate accessTemplate; |     private final AccessTemplate accessTemplate; | ||||||
| 
 | 
 | ||||||
|     private static Long calculateNextTriggerAt(final JobRequestVO jobRequestVO, Long time) { |     private static Long calculateNextTriggerAt(final JobRequestVO jobRequestVO, Long time) { | ||||||
| @ -224,7 +224,7 @@ public class JobServiceImpl implements JobService { | |||||||
|         jobTaskPrepare.setNextTriggerAt(DateUtils.toNowMilli()); |         jobTaskPrepare.setNextTriggerAt(DateUtils.toNowMilli()); | ||||||
|         jobTaskPrepare.setTaskExecutorScene(JobTaskExecutorSceneEnum.MANUAL_JOB.getType()); |         jobTaskPrepare.setTaskExecutorScene(JobTaskExecutorSceneEnum.MANUAL_JOB.getType()); | ||||||
|         // 创建批次 |         // 创建批次 | ||||||
|         terminalJobPrepareHandler.handler(jobTaskPrepare); |         terminalJobPrepareHandler.handle(jobTaskPrepare); | ||||||
| 
 | 
 | ||||||
|         return Boolean.TRUE; |         return Boolean.TRUE; | ||||||
|     } |     } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 opensnail
						opensnail