【问题标题】:Trying to make a daily job schedule with quartz in java试图在java中用石英制作每日工作计划
【发布时间】:2021-02-11 21:23:47
【问题描述】:

我正在开发一个 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");
        }
    }
}

永远不会调用该作业。谁能告诉我我做错了什么?

您好, 马丁。

【问题讨论】:

    标签: java quartz


    【解决方案1】:
    1. 你调用了你的类作业(小写字母),但在 JobBuilder Job.class 中使用(大写字母) - 它是 org.quartz 的一个接口。 .调用你的类 - StartMyBotJob 以避免这种情况,或打印 JobBuilder.newJob(job.class)
    2. 使您的作业类与您的类分开(在另一个文件中)或使其公开(对另一个对象创建可见)和静态(如果嵌套类不是静态的,它依赖于 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");
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 2018-03-06
    • 1970-01-01
    相关资源
    最近更新 更多