java - 试图在java中用石英制作每日工作计划
问题描述
我正在开发一个 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( j ob.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");
}
}
}
推荐阅读
- scala - 如何针对特定负载配置文件的部分加特林测试
- c - getline() 内存重新分配失败
- swift - Swift 中的编译时条件协议一致性
- android - 安全存储数据的最佳方式是什么?
- r - 在 Studio R 中绘制回撤图
- java - 在正确的 .xlsx 文件上生成 Apache NiFi ConvertExcelToCSV 处理器“无法读取 zip 条目源”错误
- r - ggplo2 中的标准偏差与数据不匹配并且在图中看起来很奇怪
- vb.net - 从 vb.net 删除 acessdtabase 表中的所有数据
- windows - 在冗长的启动/等待命令期间提供进度指示
- python-3.x - 将 AWS KMS 公钥(从字节)转换为 .pem 文件