线程并发处理跑批任务
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;
相关文章推荐
- 独立任务最优调度问题
- 结合调度器完成爬虫任务
- Hadoop0.21.0源码流程分析(3)-Task节点管理启动任务
- 在Spring中使用Quartz进行任务调度(1)
- 任务five咋就一个数
- 一步步学习SPD2010--第一章节--探索SPD2010(7)--使用任务窗格
- cocos2dx 定时执行任务
- pta 5-2 任务调度的合理性
- 解决任务计划程序未启动任务,因为相同任务的实例正在运行的问题
- Spring @Scheduled 定时任务
- 使用 系统任务计划程序 实现定时自动关机
- Linux Crontab 定时任务 命令详解
- 12周任务5:特殊三位数
- 基于嵌入式操作系统VxWorks的多任务并发程序设计(2) ――任务控制
- linux下的定时任务
- 记Hadoop2.5.0线上mapreduce任务执行map任务划分的一次问题解决
- FreeRTOS - 任务使用注意
- Spring Boot集成持久化Quartz定时任务管理和界面展示
- oracle数据库定时任务
- task tracker最大任务数设置