我想基于cron表达式运行一个作业,但它应该在rest调用后从DB中查找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());
}
一旦rest 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());
}
}
我是Spring调度器的新手。我读了很多关于@ScheduledExecutorService和TimerTask的文章。 因此,据我所知,@ScheduledExecutorService和ScheduledExecutorService的功能大部分是相同的,但如果您的代码是在spring中,那么最好在代码中使用@ScheduledExecutorService。 所以我的问题是,假设我想在15
我有一个工作,需要执行两次每天在不同的时间。例如10:00和15:30。我怎样才能做到这一点?
null 上个月的第一天和本月的第一天 上月1日和本月第3个工作日 当前星期的星期一日期和当前星期的staturday日期。
我的路线计划每月在凌晨1:00运行一次,如果我的应用程序在这段时间内关闭,就会出现问题,所以我想在应用程序启动时运行该作业。 它使用时间段(如果服务重新启动,作业将运行),但不使用cron表达式。 我试过使用以下方法,但没有成功。 从(“quartz2://scheduler?cron=0 45 15 1 1/1?”? 有人能让我知道,如果我错过了什么。
我正在尝试在特定时间调用API。但有时api调用可能会失败,所以我制定了一个逻辑来检查api调用何时失败。 确认api调用失败后,我想将@Schedulercron表达式从当前cron表达式更改为15分钟后。 如何动态更改cron表达式?? 下面是我的API调用代码。
我有下面的Spring作业每天运行两次,请检查我下面的cron express是否正确,每天触发两次。 我尝试了上面的表达式,但这不起作用。这是怎么回事?