是否可以添加/删除/修改使用我的门户网站的最终用户动态(在运行时)在Quartz Spring Boot中调度的Job . 由于时间表 start() 无法从外部访问,我不知道有什么办法 . 基本上我需要将所有计划信息存储到数据库中并访问它们 . Im建设的门户将被大量用户使用,这将是实现这一目标的正确解决方案吗?
start()
否则我可以像下面这样使用cron
@Scheduled(cron = "0 5 * * * *")
每5分钟扫描一次工作来实现这一目标 .
这绝对是可能的 .
您只需自动装配调度程序,每当您的用户想要更改任务时,您都会使用 Scheduler#scheduleJob 和 Scheduler.deleteJob 与 MethodInvokingJobDetailFactoryBean 实例(代表作业) . 要创建cron作业触发器,请使用 Trigger class .
Scheduler#scheduleJob
Scheduler.deleteJob
MethodInvokingJobDetailFactoryBean
Trigger
我的代码中没有可运行的摘录(EtlManager是我希望运行的方法的专有类,etlTask是包含运行频率的持久信息的对象等):
@Autowired private Scheduler scheduler;
在方法上对用户添加新任务做出反应:
MethodInvokingJobDetailFactoryBean jobDetail = new MethodInvokingJobDetailFactoryBean(); EtlManager em = this.appContext.getBean(etlTask.getTask().getExeClass(), EtlManager.class); jobDetail.setTargetObject(em); jobDetail.setTargetMethod("run"); jobDetail.setName(etlTask.getAppTaskCode()); jobDetail.setGroup(this.appCode); jobDetail.setConcurrent(false); jobDetail.afterPropertiesSet(); Trigger trigger = TriggerBuilder.newTrigger().withIdentity("CRON" + etlTask.getTiming().getId(), this.appCode) .withSchedule(CronScheduleBuilder.cronSchedule(etlTask.getTiming().getCronExpression()) .withMisfireHandlingInstructionDoNothing()) .startAt(etlTask.getTiming().getStartAfter()) // .build(); scheduler.scheduleJob((JobDetail) jobDetail.getObject(), trigger);
这里有一个非常相似的QA,不确定100%是否重复:Java Example: Dynamic Job Scheduling with Quartz
1 回答
这绝对是可能的 .
您只需自动装配调度程序,每当您的用户想要更改任务时,您都会使用
Scheduler#scheduleJob
和Scheduler.deleteJob
与MethodInvokingJobDetailFactoryBean
实例(代表作业) . 要创建cron作业触发器,请使用Trigger
class .我的代码中没有可运行的摘录(EtlManager是我希望运行的方法的专有类,etlTask是包含运行频率的持久信息的对象等):
在方法上对用户添加新任务做出反应:
这里有一个非常相似的QA,不确定100%是否重复:Java Example: Dynamic Job Scheduling with Quartz