您的位置:首页 > 其它

线程并发处理跑批任务

2018-03-08 18:20 99 查看
定时任务类代码:
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*/@Overridepublic 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 <= #{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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: