如何在 spring 的 运行 工作中使用 Cron 表达式

How to Use Cron expression for running a job in spring

我想 运行 基于 cron 表达式的作业,但它应该在 rest 调用后从数据库中查找 cron 表达式。

@SpringBootApplication
@EnableScheduling
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}


Controller
**************
        @PostMapping
    @RequestMapping(value = "/addProduct")
    public ResponseEntity saveProduct(@RequestBody Product product){

        prodList.add(product);
        startJob();
        return new ResponseEntity("Product saved successfully", HttpStatus.OK);
    }

    @Scheduled(cron = "*/2 * * * * *")
    public void startJob() {
        System.out.println("printing"+ new Date());
    }

一旦其余的 api 被命中,它应该等待我们可以从数据库或任何方法获得的 cron 表达式,然后它应该在指定的时间开始。

它像普通方法调用一样工作。

您可以让您的控制器实现 SchedulingConfigurer,它有一个名为 configureTasks() 的回调,它将在 Spring 启动时调用。

在此回调中,您可以访问 ScheduledTaskRegistrar,它是一个帮助程序 bean,可用于以编程方式安排任务。因此,将这个助手 bean 保存到控制器的内部字段中,这样您的控制器就可以访问它以在以后安排新任务。

@RestController
public class MyController implements SchedulingConfigurer{

    private ScheduledTaskRegistrar scheduledTaskRegistrar;

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        this.scheduledTaskRegistrar = taskRegistrar;
    }

    @PostMapping
    @RequestMapping(value = "/addProduct")
    public ResponseEntity saveProduct(@RequestBody Product product){

        //.....

        //Load the cron expression from database 
        String cronExpression = loadCronExpressionFromDatabase();
        CronTask cronTask = new CronTask(() -> startJob() ,cronExpression);
        scheduledTaskRegistrar.scheduleCronTask(cronTask);


        return new ResponseEntity("Product saved successfully", HttpStatus.OK);
    } 

    public void startJob() {
        System.out.println("printing"+ new Date());
    }
}