java - 我可以使用方法而不是 Quartz 类来定义作业实例吗?

标签 java quartz-scheduler quartz

我正在阅读 quartz documentation并尝试了解我是否可以在 Job 实例方法而不是类中传递。

例如,如果有类,我需要写:

public class MyJobClass implements Job {

    public MyJobClass() {
        // Instances of Job must have a public no-argument constructor.
    }

    public void execute(JobExecutionContext context)
            throws JobExecutionException {

        JobDataMap data = context.getMergedJobDataMap();
        System.out.println("someProp = " + data.getString("someProp"));
    }    
}

并定义一个作业实例,例如:

JobDetail job1 = newJob(MyJobClass.class) // what about method here
    .withIdentity("job1", "group1")
    .usingJobData("someProp", "someValue")
    .build();

按照同样的原则,我尝试定义作业实例传递方法,例如:

// define the job
JobDetail job = newJob(testMethod())
               .withIdentity("job1", "group1")
               .build();

方法如下:

private Class<? extends Job> testMethod() {
    //...  
    return null;
}

但我收到错误:

java.lang.IllegalArgumentException: Job class cannot be null.

更新: 我在方法中返回 null ,因为如果我不这样做,我会得到: enter image description here

最佳答案

您的testMethod()方法返回null。 Quartz 不接受 null 并失败。

Quartz 想要自己管理作业,所以这就是为什么你只允许传递 class 而不是 instance

为什么需要提供自己的实例?如果您想让其“持久”以在执行之间保持状态,那么 Quartz 提供了有状态作业概念,请参阅 http://www.quartz-scheduler.org/api/2.3.0/org/quartz/StatefulJob.html

关于java - 我可以使用方法而不是 Quartz 类来定义作业实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55799057/

相关文章:

java - Restdoc 在尝试记录子对象时抛出 org.springframework.restdocs.snippet.SnippetException

java - 将鼠标移到 Chrome 网页元素上时计时器会加快

java - 从 Quartz 中的作业类名称获取作业 key

java - 改造响应主体接收到具有空字段的一半对象

java - 使用 BlockingQueue 下载 PDF 文件

grails - Quartz 作业中的 org.hibernate.LazyInitializationException

java - Quartz:执行cron触发器,跳过下一次执行

quartz-scheduler - */5 和 0/5 之间的 Cron 表达式差异

java - 使用计划的 cron 时,Spring 计划正常关闭不起作用

java - 每小时 30 分钟后运行的 Cron 表达式