如何解决尝试在java中使用quartz制定每日工作计划
我正在开发一个 Discord Bot,应该每天都做某事。我尝试使用 Quartz 库,但从未执行过该作业。以下是我用于测试的代码:
import org.quartz.*;
import shedule.Daily;
import static org.quartz.CronScheduleBuilder.cronSchedule;
public class QuartzTestClass {
private void doIt() throws SchedulerException {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler scheduler = schedFact.getScheduler();
scheduler.start();
JobBuilder jobBuilder = JobBuilder.newJob(Job.class);
JobDataMap data = new JobDataMap();
data.put("latch",this);
JobDetail jobDetail = jobBuilder.usingJobData("test","QuartzTestClass")
.usingJobData(data)
.withIdentity("testJob","Daily")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("fireEveryDay","Daily")
.startNow()
.withSchedule(cronSchedule("0 13 22 ? * * *")) //this is now +1 min
.build();
scheduler.scheduleJob(jobDetail,trigger);
}
public static void main (String[] args) throws SchedulerException {
new QuartzTestClass().doIt();
}
private class job implements Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("executed");
}
}
}
该作业从未被调用。有人能告诉我我做错了什么吗?
您好, 马丁。
解决方法
- 你称你的班级工作(小写字母),但在 JobBuilder Job.class 中使用(大写字母) - 它是 org.quartz 的接口。 .调用您的类 - StartMyBotJob 以避免这种情况,或打印 JobBuilder.newJob(job.class)
- 使您的作业类与您的类分开(在另一个文件中)或使其公开(由另一个对象创建可见)和静态(如果嵌套类不是静态的,则它依赖于 QuartzTestClass,并需要它的实例来创建对象. 查看更多 - https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html)
这个版本应该可以工作:
import org.quartz.*;
import static org.quartz.CronScheduleBuilder.cronSchedule;
public class QuartzTestClass {
private void doIt() throws SchedulerException {
SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler scheduler = schedFact.getScheduler();
scheduler.start();
JobBuilder jobBuilder = JobBuilder.newJob(StartMyBotJob.class);
JobDataMap data = new JobDataMap();
data.put("latch",this);
JobDetail jobDetail = jobBuilder.usingJobData("test","QuartzTestClass")
.usingJobData(data)
.withIdentity("testJob","Daily")
.build();
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("fireEveryDay","Daily")
.startNow()
.withSchedule(cronSchedule("0 13 22 ? * * *")) //this is now +1 min
.build();
scheduler.scheduleJob(jobDetail,trigger);
}
public static void main (String[] args) throws SchedulerException {
new QuartzTestClass().doIt();
}
public static class StartMyBotJob implements Job{
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("executed");
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。