我之前有一个做法就写一个定时器。20秒中执行一次。然后去判断线程池的数量。如果线程池空闲就继续去读数据库。如果线程池中的线程没处理完。就继续处理。等下一个20秒再去判断。

/**
* 截至时间20150922
*/
private int totalPages = 6778;
// 每20秒执行一次
@Scheduled(cron="*/20 * * * * ?")
public void myTest() {
System.out.println("=============================================");
System.out.println("ActiveCount :"+taskExecutor.getActiveCount());
System.out.println("PoolSize :"+taskExecutor.getPoolSize());
System.out.println("CorePoolSize :"+taskExecutor.getCorePoolSize());
System.out.println("=============================================");
if(taskExecutor.getActiveCount()<10){
System.out.println("当前页:"+page);
if(page<=totalPages){
for (int i = page; i < page+5; i++) {
taskExecutor.execute(new crawlTask(i,jobPhotosDAO,storageService));
}
page=page+5;
}else {
logger.info("抓取页码结束 {}",page);
}
}
}