package top.shaoxiu.scheduleTask;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import top.shaoxiu.entity.Endpoint;
import top.shaoxiu.mapper.EndpointMapper;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;
/**
* Created by xiu on 2019/4/12.
* 定时任务,定时扫描客户端是否在线
*/
@Component
@EnableScheduling //启动定时任务
public class OnlineUserScheduleTask {
@Resource
private EndpointMapper endpointMapper;
//线程池
private static ExecutorService es = Executors.newCachedThreadPool();
//上一次执行完毕时间点后x秒后执行
@Scheduled(fixedDelay = 10000)
public void scheduleTask(){
List endpointList = endpointMapper.getAllEndpoint();
List<Future> futureList = new ArrayList<>();
for(Endpoint endpoint : endpointList){
OnlineTaskComputation onlineTaskComputation = new OnlineTaskComputation(endpoint);
futureList.add(es.submit(onlineTaskComputation));
}
for(Future future : futureList){
try {
Endpoint ep = future.get();
//System.out.println(ep.toString());
if(!ep.isOnline()){
endpointMapper.removeEndpoint(ep);
}
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
}