首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在某些条件下,如何正确地在RepeatStatus.CONTINUABLE中运行任务?

在某些条件下,如何正确地在RepeatStatus.CONTINUABLE中运行任务?
EN

Stack Overflow用户
提问于 2022-05-03 10:12:27
回答 1查看 72关注 0票数 0

我有一个简单的工作,由两个任务组成,每个任务都发出HTTP请求以获得一些状态结果。

代码语言:javascript
运行
复制
    @Bean
public Job receiveStatusesJob(
        @Qualifier(RECEIVE_STATUSES_PARTITIONER_BEAN) Partitioner partitioner,
        SecondStatusReceivingTasklet secondStatusReceivingTasklet) {
    var messagingTemplate = new MessagingTemplate();
    messagingTemplate.setDefaultChannel(receiveStatusesPartitionRequestChannel());

    return jobBuilderFactory.get(RECEIVE_STATUSES_JOB)
            .start(managerStepBuilderFactory.get(RECEIVE_STATUS_MANAGER_STEP)
                    .partitioner(RECEIVE_STATUS_WORKER_STEP, partitioner)
                    .gridSize(100)
                    .messagingTemplate(messagingTemplate)
                    .allowStartIfComplete(true)
                    .build())
            .next(stepBuilderFactory.get(SECOND_RECEIVE_STATUS_STEP)
                    .tasklet(secondStatusReceivingTasklet)
                    .allowStartIfComplete(true)
                    .build())
            .incrementer(new RunIdIncrementer())
            .build();
}

第一个微线程看起来像

代码语言:javascript
运行
复制
@Slf4j
@Component
@StepScope
public class StatusReceivingTasklet extends Tasklet {
//constructors and services

@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) {
    Object urlsToCheck = stepContribution.getStepExecution().getExecutionContext().get(URLS_TO_CHECK_PARAM);
    if (urlsToCheck instanceof List) {
        return receiveProviderPaymentCbsStatuses((List<String>) urlsToCheck );
    }
}

private RepeatStatus receiveStatuses(List<String> urlsToCheck ) {
    var repeatStatus = RepeatStatus.FINISHED;
    for (String url: urlsToCheck ) {
            repeatStatus = sendStatusRequestAndHandleResponse(repeatStatus, url);
        } 
    return repeatStatus;
}

private RepeatStatus sendStatusRequestAndHandleResponse(RepeatStatus repeatStatus,
                                                        String urlToCheck) {
  
    StatusResponse statusResponse =
            sendingService.checkStatus(urlToCheck);
    log.debug("Received CBS response: {}", cbsStatusResponse);
    if (statusResponse.getHttpStatus().equals(200)) {
        //business logis work
    } else if (!statusResponse.getHttpStatus.equals(200) && !status.getHttpStatus.equals(500)) {
        repeatStatus = RepeatStatus.CONTINUABLE;
    } else {
// business logic
    }
    return repeatStatus;
}

}

因此,如果我的响应状态与200不同,而500Task处于状态,控制,如果我有200个任务状态,或者与500个任务状态不同,则为 different 。当我有tas状态可持续时,如何正确地定期(每5-10分钟)继续接收状态,而任务不在状态完成

EN

回答 1

Stack Overflow用户

发布于 2022-05-04 09:12:07

我不确定我是否完全理解您的用例,但我不会将调度逻辑(每5-10分钟)与任务的业务逻辑混合在一起。您可以定义一个执行单个调用的任务,然后将其调度为每5-10分钟运行一次您最喜欢的调度库(例如,一个带有@预定注释的方法)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72097902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档