如何在 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());
}
}
我想 运行 基于 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());
}
}