SpringBoot执行器未显示计划任务

问题描述

我用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");
    }
}

,执行器的结果仅显示带注释的任务:

{
  "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");
    }

}