Quartz怎么根据用户设定的时间执行定时任务(页面上用户自己指定,执行一次)
定时任务的启动是在指定时间执行的,比如用户指定,周一13:30 的时候执行发布消息的任务。不知道这样的需要可以用什么来实现,网上关于定时任务好像都是在指定时间内重复执行某任务,没有关于指定时间执行任务的讨论啊!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
public static void addQuartz(String cuid,String fId,String status,Object date){
QuantzPluginMine quartz = getQuartz();
Calendar calendar = Calendar.getInstance();
try {
if(date instanceof String){
date = DateUtil.toUtilDate(date+"", DateUtil.D2);
}
calendar.setTime((java.util.Date)date);
quartz.add(QuartzUtil.exp(calendar), fId+status, cuid, new FormStartAndStop(), QuartzUtil.getJobDataMap(cuid, fId, status));
} catch (ParseException e) {
e.printStackTrace();
}
}
public static void deleteJob(String cuid,String fId,String status){
try {
Scheduler scheduler = QuartzUtil.getQuartz().getScheduler();
Trigger trigger = null;
if((trigger = scheduler.getTrigger(new TriggerKey(fId+status, cuid)))!=null){
scheduler.deleteJob(trigger.getJobKey());
}
} catch (SchedulerException e) {
e.printStackTrace();
}
}
public static Trigger getTrigger(String cuid,String fId,String status){
Trigger trigger = null;
try {
trigger = (getQuartz().getScheduler() == null) ? null : getQuartz().getScheduler().getTrigger(new TriggerKey(fId+status, cuid));
} catch (SchedulerException e) {
e.printStackTrace();
}
return trigger;
}
昨天刚写的,和你需求基本一致,需要手动去添加定时、更改定时时间、删除定时
你可以去找一个cron表达式的生成器,然后根据用户的时间反向更新到quartz的updateStarttime(好像是这个方法,太久了忘记了),Job中设置启动后自动失效就可以了。
谢谢大神
Quartz 的Cron任务调度表达式一般人很难理解,在Googole上查询也没有发现类似的代码,所以开发了一个对Quartz Cron 表达式的可视化双向解析和生成的一个java的GUI程序,供使用Quartz的程序员参考和使用.https://github.com/wjw465150/CronExpBuilder
看看这个