?? 博主猫头虎 带您 Go to New World.?? ? 博客首页——猫头虎的博客? ?《面试题大全专栏》 文章图文并茂?生动形象?简单易学!欢迎大家来踩踩~? ? 《IDEA开发秘籍专栏》学会IDEA常用操作,工作效率翻倍~? ? 《100天精通Golang(基础入门篇)》学会Golang语言,畅玩云原生,走遍大小厂~?
?? 希望本文能够给您带来一定的帮助?文章粗浅,敬请批评指正!?
这篇文章主要介绍了springBoot @Scheduled实现多个任务同时开始执行,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
定时任务是单线程执行的,默认一个时间段只能执行一个定时任务
如果多个定时任务同时执行的话,那么会按照顺序执行
创建线程池,且注入到spring 中,
@EnableScheduling 定时任务扫描,开始定时任务计划支持
@Service
@Component
@EnableScheduling
public class SendMsgNoticeServiceTimer {
private static final Logger logger = LoggerFactory.getLogger(SendMsgNoticeServiceTimer.class);
@Autowired
private NySendMsg nySendMsg;
//创建定时任务线程池
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(64);
return taskScheduler;
}
@Scheduled(cron="0 0 10 * * ?")
public void sendPaymentNotice() {
logger.info("***-sendPaymentNotice--定时任务每天凌晨10点执行一次---***");
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
String endDate = sf.format(new Date());
JSONObject obj = sendTradingFeeChoosed(String.valueOf(1));
logger.info("***---定时任务" + endDate + ":系统自动发送" + obj.size() + "条短信提醒---***");
}
@Scheduled(cron="0 0 10 * * ?")
public void sendLateRemind() {
logger.info("***--sendLateRemind---定时任务每天凌晨10点执行一次---***");
SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
String endDate = sf.format(new Date());
JSONObject obj = sendTradingFeeChoosed(String.valueOf(2));
logger.info("***---定时任务" + endDate + ":系统自动发送" + obj.size() + "条短信提醒---***");
}
}
@Scheduled
是 Spring 框架中用于创建定时任务的注解,它可以用于方法上,允许你定义方法在指定的时间间隔或固定时间点执行。如果你有多个使用 @Scheduled
注解的方法,它们默认会在相应的时间点并行执行。在这种情况下,需要注意一些问题来确保多个定时任务能够同时执行而不发生冲突。
以下是关于@Scheduled
多个定时任务同时执行的一些方法总结:
ThreadPoolTaskScheduler
或 TaskScheduler
的 bean 来自定义线程池,以控制定时任务的并发度。
总之,@Scheduled
注解允许你在 Spring 中方便地创建定时任务,但在多个定时任务同时执行时,需要考虑线程安全、任务间隔、线程池配置、异常处理等因素,以确保定时任务能够在并行执行时保持稳定和高效。