// 声明一个线程池(并指定线程池的名字)
@Bean("taskExecutor")
public Executor asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//核心线程数5:线程池创建时候初始化的线程数
executor.setCorePoolSize(5);
//最大线程数5:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程
executor.setMaxPoolSize(500);
// executor.setMaxPoolSize(15);
//缓冲队列500:用来缓冲执行任务的队列
// executor.setQueueCapacity(500);
executor.setQueueCapacity(800);
//允许线程的空闲时间60秒:当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
executor.setKeepAliveSeconds(60 * 30);
// executor.setKeepAliveSeconds(60);
// CallerRunsPolicy策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池
executor.setThreadNamePrefix("DailyAsync-");
executor.initialize();
return executor;
}
在写的定时任务中
/**
* 同步 噪声的监控站点信息
*
* @throws ParseException
*/
@Async("cc_taskExecutor")
@Scheduled(cron = "0 0 01 * * ?") //每天上午1点触发
public void getSiteInfoNoise() throws ParseException {
//查出所有站点和最新时间
List<Map<String, Object>> mapList = plluOnlnMonWstService.getSiteInfoNoise();
if (mapList != null && mapList.size() > 0) {
for (Map<String, Object> map : mapList) {
//比较前置库和我们库里面的数据,条数相同 不同步 条数不同 同步最新数据
if (map.get("stnCd") != null && map.get("time") != null) {
int countBef = plluOnlnMonWstService.getNoiseSiteCountBef(map.get("stnCd").toString(), map.get("time").toString());
int count = plluOnlnMonWstService.getNoiseSiteCount(map.get("stnCd").toString(), map.get("time").toString());
//条数不同 同步最新数据
if (count != countBef) {
//删除所有数据
plluOnlnMonWstService.deteteAllNoiseSite(map.get("stnCd").toString());
//添加最新数据
List<Map<String, Object>> mapLists = plluOnlnMonWstService.getAllNoiseSiteCountBef(map.get("stnCd").toString(), map.get("time").toString());
if (mapLists != null && mapLists.size() > 0) {
for (Map<String, Object> maps : mapLists) {
SiteInfo siteInfo = new SiteInfo();
siteInfo.setStnCd(maps.get("stn_cd") == null ? "" : maps.get("stn_cd").toString());
siteInfo.setDataTm(maps.get("data_tm") == null ? "" : maps.get("data_tm").toString());
siteInfo.setFactCd(maps.get("fact_cd") == null ? "LMx" : maps.get("fact_cd").toString());
siteInfo.setMonVal(maps.get("mon_val") == null ? "0" : maps.get("mon_val").toString());
plluOnlnMonWstService.addSiteInfo(siteInfo);
}
}
}
}
}
}
}