67,513
社区成员
发帖
与我相关
我的任务
分享
public abstract class AbstractBatchJobProcessor implements JobProcessor
{
private final static ExecutorService executors = Executors.newCachedThreadPool();
private ScheduledExecutorService schedulerExecutors = Executors.newScheduledThreadPool(1);
private LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>();
/**
* 处理包大小
*
* <p>
* TODO 方法功能描述
*
* @return
* @return int
*/
abstract public int getPackageSize();
/**
* 处理周期(单位:分)
*
* <p>
* TODO 方法功能描述
*
* @return
* @return int
*/
abstract public int getCycle();
/**
* 获取任务列表
*
* <p>TODO 方法功能描述
*
* @return
* @return List<Runnable>
*/
abstract public List<Runnable> getTaskList();
// 每天凌晨0点触发
@Override
public void process(ProcessContext context)
{
List<Runnable> taskList = getTaskList();
if(taskList == null || taskList.size() == 0)
{
return;
}
for(Runnable task : taskList)
{
addTask(task);
}
start();
}
public void start()
{
schedulerExecutors.scheduleAtFixedRate(new TaskWorker(), 1, getCycle(), TimeUnit.MINUTES);
}
private class TaskWorker implements Runnable
{
@Override
public void run()
{
int i = 0;
while (!queue.isEmpty() && i++ < getPackageSize())
{
Runnable nextTask = nextTask();
if (nextTask != null)
{
executors.execute(nextTask);
}
}
}
}
public Runnable nextTask()
{
try
{
return queue.take();
}
catch (InterruptedException e)
{
return null;
}
}
public void addTask(Runnable task)
{
try
{
queue.put(task);
}
catch (InterruptedException e)
{
}
}
}