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