Spring 启动休息 API 调度程序在 Heroku 上不工作

Spring Boot Rest API Scheduler Not Working on Heroku

我已经在 Heroku Free Tier 上部署了我的 Spring Boot Rest Api 后端。该应用程序有一个 Scheduled 方法,该方法应该是每天中午 12 点 运行 一次。我知道 Heroku 免费层 Dyno 在 30 分钟不活动后进入睡眠状态。因此,除非 dyno 处于活动状态,否则特定方法不会 运行。我已经确认该方法 运行 是 Dyno 处于活动状态时的预期方式。我做了一些研究,在这里找到了一些相关的答案:

答案建议,“定义一个逻辑并每 30 分钟调用一次应用程序自己的端点。调度程序将在应用程序启动时开始工作。因此您可以保证应用程序 运行 全部时间。” 我对此有几个问题:

  1. 调用终点的逻辑到底是什么?我相信 Spring 在随机控制器方法上使用 Cron 进行引导计划不是正确的方法吗?
  2. Heroku 提供了自己的免费调度程序,但不保证调度程序会 运行。所以我正在寻找在 Api 本身中解决它的方法。 任何帮助将不胜感激。

您可以开发一个简单的 REST 端点,例如 /ping/heath-check 来获取状态。

样本

@RestController
public class PingRestController {

  @RequestMapping(method = RequestMethod.GET, path = "/api/ping")
  public ResponseEntity<String> getPing() {
    return ResponseEntity.ok("OK");
  }
}

因为 Spring-Boot 已经 Actuator 支持健康指标,您也可以调用它来检查状态。 Example

我相信您可能已经配置了调度程序。如果没有,那么你可以参考link