Вы можете заставить свой контроллер реализовывать SchedulingConfigurer
, который имеет обратный вызов configureTasks()
, который будет вызываться при запуске Spring.
В этом обратном вызове вы можете получить доступ к ScheduledTaskRegistrar
, который является вспомогательным компонентом, который может использоваться для программного планирования задачи. Таким образом, сохраните этот вспомогательный компонент во внутреннем поле контроллера, чтобы ваш контроллер мог получить к нему доступ, чтобы запланировать новую задачу позже.
@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());
}
}