/**
* @author gaoshanshan
*
* @Scheduled多任务的冲突解决
* @date 2022/1/7
*/
@Configuration
@EnableAsync
public class TaskScheduleConfig {
private static final int corePoolSize = 10 // 默认线程数
private static final int maxPoolSize = 100 // 最大线程数
private static final int keepAliveTime = 10 // 允许线程空闲时间(单位:默认为秒),十秒后就把线程关闭
private static final int queueCapacity = 200 // 缓冲队列数
private static final String threadNamePrefix = "it`s-threadDemo-" // 线程池名前缀
@Bean("threadPoolTaskExecutor")
public ThreadPoolTaskExecutor getDemoThread(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor()
executor.setCorePoolSize(corePoolSize)
executor.setMaxPoolSize(maxPoolSize)
executor.setQueueCapacity(keepAliveTime)
executor.setKeepAliveSeconds(queueCapacity)
executor.setThreadNamePrefix(threadNamePrefix)
//线程池拒绝任务的处理策略
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy())
//初始化
executor.initialize()
return executor
}
}
定时任务写法
/**
* @author gaoshanshan
* @date 2022/1/7
*/
@Component
public class SchedulerTaskController {
private Logger logger= LoggerFactory.getLogger(SchedulerTaskController.class)
private static final SimpleDateFormat dateFormat=new SimpleDateFormat("HH:mm:ss")
private int count=0
@Scheduled(cron="0/1 * * * * ?")
@Async("threadPoolTaskExecutor")
public void process(){
logger.info("英文:this is scheduler task runing "+(count++))
}
@Scheduled(fixedRate = 6000)
@Async("threadPoolTaskExecutor")
public void currentTime(){
logger.info("中文:现在时间"+dateFormat.format(new Date()))
}
@Scheduled(fixedRate = 1000)
@Async("threadPoolTaskExecutor")
public void currentTime2(){
logger.info("中文--------:现在时间"+dateFormat.format(new Date()))
}
@Scheduled(fixedDelay = 1000)
@Async("threadPoolTaskExecutor")
public void currentTime3(){
logger.info("中文>>>>>>>>:现在时间"+dateFormat.format(new Date()))
}
}
评论区