线程并发处理跑批任务

15 篇文章 1 订阅
7 篇文章 0 订阅

定时任务类代码:

 

package com.jzfq.rms.autoApprove.job;


import com.alibaba.fastjson.JSONObject;
import com.jzfq.rms.autoApprove.bean.InnerRuleProcess;
import com.jzfq.rms.autoApprove.bean.InnerRuleProcessQueryBean;
import com.jzfq.rms.autoApprove.service.IExecuteTaskService;
import com.jzfq.rms.autoApprove.service.IInnerRuleProcessService;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


/**
 * 内部规则跑批定时任务
 * @author 大连桔子分期科技有限公司
 */
@Component("innerRuleProcessingJob")
public class InnerRuleProcessingJob {
    private final Logger LOG = LoggerFactory.getLogger(InnerRuleProcessingJob.class);
    @Autowired
    IExecuteTaskService executeTaskService;

    ExecutorService fixedThreadPool = Executors.newCachedThreadPool();
    public void execute() {
        //线程池:0/1/2/3/4/5   每个线程独立处理5单数据
        String[] remainders = {"0","1","2","3","4","5"};
        for(int i = 0;i < remainders.length;i++){
            int intRemainder = new Byte(remainders[i]);
            fixedThreadPool.execute(new Runnable() {
                @Override
                public void run() {
                    //内部规则跑批开始
                    try {
                        executeTaskService.innerRuleProcessing(6,intRemainder);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });
        }

    }
}

 

 

 

 

innerRuleProcessing类实现代码:
 
innerRuleProcessQueryBean.setLimitTime(5); innerRuleProcessQueryBean.setExecuteStatus(0); innerRuleProcessQueryBean.setExecuteTimes(3); innerRuleProcessQueryBean.setModulus(modulus); innerRuleProcessQueryBean.setRemainder(remainder); List<InnerRuleProcess> innerRuleProcesseslist = innerRuleProcessService.getInnerRuleTodoList(innerRuleProcessQueryBean);
 
 
 
 
getInnerRuleTodoList方法:
 
/**
 * 获取定时任务所需的进件集合
 * @param innerRuleProcessQueryBean
 * @return
 */
@Override
public List<InnerRuleProcess> getInnerRuleTodoList(InnerRuleProcessQueryBean innerRuleProcessQueryBean) {
    return innerRuleProcessMapper.selectInnerRuleList(innerRuleProcessQueryBean);
}

 

 

 

 
 
selectInnerRuleList mybatis xml:
 
<select id="selectInnerRuleList" resultMap="BaseResultMap"  parameterType="com.jzfq.rms.autoApprove.bean.InnerRuleProcessQueryBean">
  SELECT
  <include refid="Base_Column_List" />
  FROM inner_rule_process t WHERE 1=1
  <if test="executeStatus != null" >
   AND execute_status = #{executeStatus,jdbcType=BIGINT}
  </if>
  <if test="executeTimes != null" >
    AND execute_times &lt;= #{executeTimes,jdbcType=BIGINT}
  </if>
  <if test="modulus != null and remainder != null">
    AND MOD(front_id, #{modulus}) = #{remainder}
  </if>
    ORDER BY t.`create_time`
  <if test="limitTime != null" >
    LIMIT #{limitTime,jdbcType=BIGINT}
  </if>
</select>

 

 

 

 
 
该功能当quartz调用job是 通过遍历线程组 指派给单个新起线程线程编号
sql:
select  *  from inner_rule_process where execute_status = 0 and execute_times <=3 and MOD(front_id,6) = 5;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值