Heroku免费版部署Spring Boot时@Scheduled定时任务能否唤醒休眠应用
核心结论
你配置的@Scheduled定时任务无法在Heroku免费套餐应用休眠时触发,也不能主动唤醒休眠的应用。
原因是Heroku免费dyno的休眠机制会在应用30分钟无外部访问时完全终止应用进程,而@Scheduled是Spring Boot进程内部的调度能力,进程停止后调度逻辑自然无法运行,且Heroku应用的唤醒只能通过外部HTTP请求触发,应用本身休眠时没有能力触发唤醒操作。
可行替代方案
- 方案1:借助外部定时HTTP调用服务唤醒应用
配置第三方定时任务,在每天凌晨2:58左右向你的Heroku应用的任意可用接口发送一次GET请求,触发应用启动,应用初始化完成后到3点即可正常执行内置的@Scheduled任务,无需修改原有业务代码,改造成本最低。 - 方案2:使用Heroku官方Scheduler附加组件
在Heroku应用的附加组件中启用免费版Scheduler,配置每天凌晨3点的触发规则,触发时可以调用你应用中封装了对应业务逻辑的HTTP接口,或是直接执行独立的任务脚本,是Heroku生态内的原生解决方案,稳定性更高。 - 方案3:拆解定时任务为无服务函数
将需要定时执行的业务逻辑单独拆分封装为Serverless函数,使用云厂商函数计算服务的定时触发器触发执行,绝大多数服务商的免费额度足以覆盖低频定时任务需求,完全不需要考虑应用休眠问题。 - 方案4:升级Heroku付费套餐
付费级别的dyno不会进入休眠状态,原有@Scheduled逻辑无需任何调整即可正常运行,适合不愿意调整代码架构、且可承担对应成本的场景。
内容的提问来源于stack exchange,提问作者user21597761
相关产品推荐
相关产品推荐

