大规模Schedule任务实现方案
package com.itlong.bjxizhan.support.web.job.base; import com.itlong.bjxizhan.common.DbContext;
import com.itlong.bjxizhan.domain.pojo.Task;
import com.itlong.bjxizhan.support.web.service.StandardTaskService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import java.util.List; /**
* Created by shenhongxi on 2016/7/12.
*/
public class JobRunnable implements Runnable { private static final Logger log = LoggerFactory.getLogger(JobRunnable.class); private StandardTaskService standardTaskService; private List<Task> tasks; private String dbKey; private String tableIndex; @Override
public void run() {
if (tasks != null) {
try {
DbContext.setDbKey(dbKey);
DbContext.setTableIndex(tableIndex);
for (Task task : tasks) {
task.setTableIndex(tableIndex); // 1. 一个job的多个实例,谁先成功锁定任务,谁先处理任务,若处理失败则解锁任务
// 2. 对于1中解锁失败的,要利用另外的job来专门进行解锁
// 3. 将任务分成几批,并行处理
// 4. 这些任务的子任务分批串行处理,同样有锁定-处理-失败解锁
// 5. 对于4中解锁失败的,同样要利用另外的job来专门进行解锁
boolean locked = standardTaskService.lock(task);
if (!locked) continue; boolean result = standardTaskService.process(task); standardTaskService.finished(result, task);
}
} catch (Exception e) {
log.error("Do task error", e);
throw new RuntimeException("Do task error");
}
}
} public List<Task> getTasks() {
return tasks;
} public void setTasks(List<Task> tasks) {
this.tasks = tasks;
} public StandardTaskService getStandardTaskService() {
return standardTaskService;
} public void setStandardTaskService(StandardTaskService standardTaskService) {
this.standardTaskService = standardTaskService;
} public String getTableIndex() {
return tableIndex;
} public void setTableIndex(String tableIndex) {
this.tableIndex = tableIndex;
} public String getDbKey() {
return dbKey;
} public void setDbKey(String dbKey) {
this.dbKey = dbKey;
}
}
***:org.quartz.Scheduler提供了start, bystand等方法可以对Scheduler进行管控
大规模Schedule任务实现方案的更多相关文章
- loadrunner 场景设计-手工场景方案(Schedule)设计
场景设计-手工场景方案(Schedule)设计 by:授客 QQ:1033553122 A. 定义方案schedule 在 Scenario Schedule面板中,选择一个方案schedule, ...
- loadrunner 场景设计-手工场景方案(Schedule)设计 Part 2
loadrunner 场景设计-手工场景方案(Schedule)设计 Part 2 ---------------------------接Part 1------------------------ ...
- 腾讯大规模Hadoop集群实践 [转程序员杂志]
TDW(Tencent distributed Data Warehouse,腾讯分布式数据仓库)基于开源软件Hadoop和Hive进行构建,打破了传统数据仓库不能线性扩展.可控性差的局限,并且根据腾 ...
- 大规模Hadoop集群实践:腾讯分布式数据仓库(TDW)
TDW 是腾讯最大的离线数据处理平台.本文主要从需求.挑战.方案和未来计划等方面,介绍了TDW在建设单个大规模集群中采取的 JobTracker 分散化和 NameNode 高可用两个优化方案. TD ...
- Loadrunder场景设计篇——定时器(schedule)
A. 定义方案schedule 在 Scenario Schedule面板中,选择一个方案schedule,或通过点击New Schedule定义一个新的方案 定义schedule: a.新建sc ...
- 十六款值得关注的NoSQL与NewSQL数据库--转载
原文地址:http://tech.it168.com/a2014/0929/1670/000001670840_all.shtml [IT168 评论]传统关系型数据库在诞生之时并未考虑到如今如火如荼 ...
- 腾讯TDW:大型Hadoop集群应用[转载]
转自:http://www.uml.org.cn/sjjm/201508103.asp 作者:Uri Margalit 来源:InfoQ 发布于:2015-8-10 TDW(Tencent dist ...
- 编程语言的发展趋势by Anders Hejlsberg
这是Anders Hejlsberg在比利时TechDays 2010所做的开场演讲. 编程语言的发展非常缓慢,期间也当然出现了一些东西,例如面向对象等等,你可能会想,那么我么这么多年的努力都到哪里去 ...
- 一文读懂MapReduce
Hadoop解决大规模数据分布式计算的方案是MapReduce.MapReduce既是一个编程模型,又是一个计算框架.也就是说,开发人员必须基于MapReduce编程模型进行编程开发,然后将程序通过M ...
随机推荐
- vue+vuex初入门
Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 解决问题: 传参的方法对于多层嵌 ...
- unity3d使用litjson中文显示的问题
我们在使用litjson时它的编码方式是unicode的,所以我将json转成string输出时显示的是unicode的编码.这样我们显示或者保存中文时不是很方便.我们可以将中文的unicode转成能 ...
- shrio登录验证
shiro的认证过程也就是判断用户名和密码的过程,在认证过程中,用户需要提交实体信息(用户名)(Principals)和凭据信息(密码)(Credentials)来判断用户是否合法,最常见的" ...
- CentOS单独编译安装PHP gd库扩展
注意:如果您已经编译安装过GD库,请重新编译安装php不带gd库成功后,执行以下操作 安装libpng wget http://jaist.dl.sourceforge.net/project/lib ...
- 单向链表仿LinkedList
public class ChainTable { private Node firstNode;//第一个节点 private Node lastNode;//最后一个节点 private int ...
- 【5】图解HTTP 笔记
坚持.聪明.不畏困难,我将取得最后的胜利. 第一章 了解 Web 以网络基础 1. HTTP ( HyperText Transfer Protocol ): 超文本传输协议. 2. 通讯方式: 3. ...
- CoreAnimation的使用
一.CABasicAnimation CABasicAnimation *anim = [CABasicAnimation animation]; anim.keyPath = @"posi ...
- Python数据预处理—归一化,标准化,正则化
关于数据预处理的几个概念 归一化 (Normalization): 属性缩放到一个指定的最大和最小值(通常是1-0)之间,这可以通过preprocessing.MinMaxScaler类实现. 常用的 ...
- 前端自动化部署之gulp
1.首先需要安装node+npm(这里不再叙述,网上教程一大堆) 2.gulp全局安装:npm install -g gulp 3.cd进入到你的项目目录,这里使用demo文件夹为我的示例项目 4.在 ...
- Cocoapod安装使用和常见问题(转载)
1.cocoapod的按照,cocoapod是运行在ruby环境下的,在ruby环境的 ,像cocoapod这样的开源项目时放在放在rubygems服务器上面的,但国内访问https://ruby ...