定时任务编写

一:实现

package com.welab.cycfc2.job.loan;

import com.dangdang.ddframe.job.api.JobExecutionMultipleShardingContext;
import com.dangdang.ddframe.job.plugin.job.type.simple.AbstractSimpleElasticJob;
import com.welab.cycfc2.enums.welab.LoanTaskTypeEnum;
import com.welab.cycfc2.enums.welab.TaskStatusEnum;
import com.welab.cycfc2.model.entity.LoanTask;
import com.welab.cycfc2.model.entity.LoanTaskDetail;
import com.welab.cycfc2.service.LoanService;
import com.welab.cycfc2.service.LoanTaskDetailService;
import com.welab.cycfc2.service.LoanTaskService;
import com.welab.util.UUIDShort;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;

import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 放款任务执行job
 *
 * @author lizhangyu
 */
@Slf4j
@Component
public class LoanTaskGeneralJob extends AbstractSimpleElasticJob {

    @Autowired
    private LoanTaskService loanTaskService;
    @Autowired
    private LoanService loanService;
    @Autowired
    private LoanTaskDetailService loanTaskDetailService;

    private static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(5);

    @Override
    public void process(JobExecutionMultipleShardingContext params) {
        log.info("开始执行放款任务");
        List<LoanTask> loanTasks = loanTaskService.queryLoanTaskByStatus(TaskStatusEnum.NONE.getValue());
        if(CollectionUtils.isEmpty(loanTasks)){
            log.info("待处理放款任务数量为零");
            return;
        }
        log.info("待处理记录数:[{}]", loanTasks.size());
        StopWatch watch = new StopWatch();
        watch.start();
        CountDownLatch latch = new CountDownLatch(loanTasks.size());
        loanTasks.forEach(task -> {
            EXECUTOR.submit(() -> {
                try {
                    Thread.currentThread().setName("LoanTaskGeneralJob-" + LoanTaskTypeEnum.getValueByStep(task.getCurrStep()) + "-" + UUIDShort.generate());
                    log.info("贷款号:{},步骤:{}", task.getApplicationId(), task.getCurrStep());
                    LoanTaskDetail loanTaskDetail = loanTaskDetailService.queryDetailByAppIdAndStep(task.getApplicationId(), task.getCurrStep());
                    loanService.loanTaskExecute(loanTaskDetail);
                } finally {
                    latch.countDown();
                }
            });
        });
        try {
            latch.await();
        } catch (InterruptedException e) {
            log.error("放款任务运行异常|{}", e.getMessage(), e);
        }
        watch.stop();
        log.info("放款任务执行完成,处理记录数:{},耗时:{}ms",loanTasks.size(), watch.getTotalTimeMillis());
    }
}

只是个模板类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值