石英计划中的HelloJob

20

我是Quartz的新手,遇到了编译错误。我只是尝试根据Quartz的Hello World第1课程运行HelloJob。我在声明JobDetail时遇到了问题,出现错误:JobBuilder中的newJob(Class<? extends Job>)方法不适用于参数(Class)"。

最初,代码有3个错误出现在newJobnewTriggersimpleSchedule上。

// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class)
    .withIdentity("job1", "group1")
    .build();

// Trigger the job to run now, and then repeat every 40 seconds
Trigger trigger = newTrigger()
    .withIdentity("trigger1", "group1")
    .startNow()
    .withSchedule(simpleSchedule()
            .withIntervalInSeconds(40)
            .repeatForever())            
    .build();

没有使用JobBuilder.newJob(...)、TriggerBuilder.newTrigger(...)、SimpleScheduleBuilder.simpleSchedule(...)。与给出的示例不同,我添加了导入并在newJob、newTrigger等前面附加了类调用,这样可以消除2/3的错误。但似乎仍有错误存在。

 JobDetail job = JobBuilder.newJob(HelloJob.class)
        .withIdentity("job1", "group1")
        .build();

我也尝试过用以下内容替换我的作业声明

JobDetail job = new JobDetail("job1", "group1", HelloJob.class);

但是以 Cannot instantiate the type JobDetail 结束,而且好像有几个示例都这样做。

非常感谢澄清,

谢谢!


1
你能发布一下名为“HelloJob”的类吗? - RMT
是的,这个问题出在我HelloJob中没有实现Job。对于犯了个愚蠢的错误感到抱歉! - Chandrew
2
谢谢你提出这个问题,我也遇到了同样的问题,很高兴找到了这个解决方案。看来Quartz文档有点小问题,有些遗憾。 - Richard Corfield
7个回答

40

你需要添加这行代码:

import static org.quartz.JobBuilder.*;

然后应该就可以工作了。希望如此。

编辑: 并确保'HELLOJOB'实现了JOB接口!

就这样。


6

为了使helloJob示例在quart 2.2.x上工作,您需要添加以下四个导入项:

import org.quartz.SimpleTrigger;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

3

请看以下内容:

public class HelloJob implements Job {

@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
    System.out.println("Simple Exapmle");

 }
}

2

Quartz 2的API与Quartz 1(1.5、1.6和1.7)有很大的不同,Class JobDetail { }。

Quartz-1.6.6: http://javasourcecode.org/html/open-source/quartz/quartz-1.6.6/org/quartz/JobDetail.html

Quartz 2:

public interface JobDetail extends Serializable, Cloneable {
}

// we have to create JobDetail in the below way.
JobDetail job = newJob(HelloJob.class)

// we have to create Trigger in the below way.
Trigger trigger = newTrigger()

不要忘记导入下面这个。
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;

1

1-

Quartz提供“构建器”类,定义了一个特定领域的语言。

您可以通过以下方式导入缺失的DSL:

import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;

2- 确保HelloJob类实现了org.quartz.Job而不是其他任何Job:

  public class HelloJob implements org.quartz.Job{

     public void execute(JobExecutionContext context) throws JobExecutionException{
       System.out.println("Hello!  HelloJob is executing.");
     }
  }

你可以在石英文档中找到教程

0

这个例子的更详细描述可以在网站上找到。在那里,你可以找到必要的库来导入,以及在HelloJob类中实现任务的方法。


0

你需要使用 Job 接口来实现 HelloJob.class

使用

import org.quartz.Job;

public class HelloJob implements Job {

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接