Spring Boot 执行器不显示计划任务

SpringBoot Actuator not showing scheduled task

我已经使用 SpringBoot 创建了一个简单的演示应用程序并包含了 Actuator。 带有 @Scheduled 注释的任务显示在执行器中,但那些以编程方式启动的任务则不会。有没有办法让他们也出现?

我已经注释了@EnableScheduling。

我的组件如下所示:

@Component
public class DemoComponent {
    private final TaskScheduler scheduler;

    public DemoComponent(TaskScheduler scheduler) {
        this.scheduler = scheduler;
    }

    @PostConstruct
    public void init() {
        scheduler.scheduleAtFixedRate(() -> System.out.println("Hi"), 1000);
    }

    @Scheduled(fixedRate = 1000)
    public void work() {
        System.out.println("Hello");
    }
}

并且 Actuator 的结果仅显示带注释的任务:

{
  "cron": [],
  "fixedDelay": [],
  "fixedRate": [
    {
      "runnable": {
        "target": "com.example.demo.DemoComponent.work"
      },
      "initialDelay": 0,
      "interval": 1000
    }
  ],
  "custom": []
}

查看 https://github.com/spring-projects/spring-boot/pull/9623/commits/94b00a7b0681b050bba03b4c49edf2df2ec65376 下的代码,我会说您需要使用 ScheduledTaskRegistrar 注册您的预定作业,而不是直接使用 TaskScheduler 注册它。所以像下面这样的事情应该这样做:

@Component
public class DemoComponent {
    private final ScheduledTaskRegistrar scheduler;

    public DemoComponent(ScheduledTaskRegistrar scheduler) {
        this.scheduler = scheduler;
    }

    @PostConstruct
    public void init() {
        scheduler.addFixedRateTask(() -> System.out.println("Hi"), 1000);
    }

    @Scheduled(fixedRate = 1000)
    public void work() {
        System.out.println("Hello");
    }

}