Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 石英工作还没有开始_Java_Quartz Scheduler - Fatal编程技术网

Java 石英工作还没有开始

Java 石英工作还没有开始,java,quartz-scheduler,Java,Quartz Scheduler,编辑:我正在使用quartz-2.1.5.jar。以下是我的课程总结: HttpPollingJobextendsPollingJobextendsScheduledJobimplementsorg.quartz.Job 具体而言: 1) ScheduledJob实现QuartzJob(所有myJob类型的抽象基类): 2) PollingJob扩展ScheduledJob-所有“轮询器”都以特定频率轮询某些资源/端点: import org.quartz.JobExecutionContext

编辑:我正在使用
quartz-2.1.5.jar
。以下是我的课程总结:

HttpPollingJob
extends
PollingJob
extends
ScheduledJob
implements
org.quartz.Job

具体而言:

1)
ScheduledJob
实现Quartz
Job
(所有my
Job
类型的抽象基类):

2)
PollingJob
扩展
ScheduledJob
-所有“轮询器”都以特定频率轮询某些资源/端点:

import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;

import com.me.jobs.ScheduledJob;

public abstract class PollingJob extends ScheduledJob {
    private static long DEF_FREQUENCY = 10 * 1000; // 10 secs
    private String name;    
    private long frequency;

    public PollingJob(final String nm) {
        this(nm, DEF_FREQUENCY);
    }

    public PollingJob(final String nm, final long freq) {
        super();

        setName(nm);
        setFrequency(freq);
    }

    public abstract void poll(JobExecutionContext context);

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        poll(context);      
    }

    public String getName() {
        return name;
    }

    public void setName(final String nm) {
        name = nm;
    }

    public long getFrequency() {
        return frequency;
    }

    public void setFrequency(final long freq) {
        frequency = freq;
    }

    protected final Trigger getDefaultTrigger()  {
        TriggerBuilder<?> triggerBuilder = TriggerBuilder.newTrigger()
            .startNow()
            .withSchedule(SimpleScheduleBuilder.simpleSchedule()
            .withIntervalInMilliseconds(DEF_FREQUENCY));

        return triggerBuilder.build();
    }
}
4)
JobDriver
-定义几个
HttpPollingJob
s并使用Quartz启动它们:

public class JobDriver {
    private List<HttpPollingJob> jobs;

    public JobDriver() {
        HttpPollingJob job1 = new HttpPollingJob("job-1", "http://www.example.com/1");
        HttpPollingJob job2 = new HttpPollingJob("job-2", "http://www.example.com/2");
        HttpPollingJob job3 = new HttpPollingJob("job-3", "http://www.example.com/3");

        jobs = new ArrayList<HttpPollingJob>();
        jobs.add(job1);
        jobs.add(job2);
        jobs.add(job3);
    }

    public static void main(String[] args) {
    JobDriver driver = new JobDriver();
        driver.startJobs();
    }

    private void startJobs() {
        try {
            // Obtain a basic SchedulerFactory and fire it up.
            SchedulerFactory schedulerFactory = new org.quartz.impl.StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
            scheduler.start();

            // Define a job for every declared monitor.
            JobBuilder jobBuilder = null;

            for(ScheduledJob job : jobs) {

            Trigger trigger = job.getTrigger();
            jobBuilder = JobBuilder.newJob(job.getClass());

            // Bind the current job to this trigger.
            scheduler.scheduleJob(jobBuilder.build(), trigger);

            // TODO: Shut the scheduler down politely?!?!
        }
        catch(Throwable exc) {
            logger.error(exc.getMessage());

            // Force application to kick out.
            throw new RuntimeException(exc);
        }
    }
}
公共类作业驱动程序{
私人名单工作;
公职司机(){
HttpPollingJob job1=新的HttpPollingJob(“job-1”)http://www.example.com/1");
HttpPollingJob job2=新的HttpPollingJob(“job-2”)http://www.example.com/2");
HttpPollingJob job3=新的HttpPollingJob(“job-3”)http://www.example.com/3");
作业=新的ArrayList();
添加(job1);
添加(job2);
添加(job3);
}
公共静态void main(字符串[]args){
JobDriver驱动程序=新的JobDriver();
driver.startJobs();
}
私有void startJobs(){
试一试{
//获取一个基本的SchedulerFactory并启动它。
SchedulerFactory SchedulerFactory=new org.quartz.impl.StdSchedulerFactory();
Scheduler Scheduler=schedulerFactory.getScheduler();
scheduler.start();
//为每个声明的监视器定义一个作业。
JobBuilder JobBuilder=null;
for(ScheduledJob作业:作业){
Trigger=job.getTrigger();
jobBuilder=jobBuilder.newJob(job.getClass());
//将当前作业绑定到此触发器。
scheduleJob(jobBuilder.build(),触发器);
//TODO:礼貌地关闭调度程序?!?!
}
捕获(可丢弃exc){
logger.error(exc.getMessage());
//强制应用踢出。
抛出新的运行时异常(exc);
}
}
}
当我运行这段代码时,我得到了一个完美的启动,没有错误或运行时异常。如果我使用
System.out.println
语句,我可以看到每一行代码都完美地执行。唯一的问题是,一旦程序运行,它就不会打印“Job fired!”消息,指示轮询作业正在启动

我尝试了
start()
shutdown()
的每一种组合,但都没有效果。任何Quartz专家都能看看这段代码,告诉我为什么工作没有启动吗


在日志(我配置了log4j)中,我看到正在为计划的作业创建Quartz worker线程。我感觉我已经完成了99%的工作,但只是缺少了一些明显的东西。提前感谢!

显然,您还没有启动触发器。请参阅或:


能否尝试将类
PollingJob
中的方法
getDefaultTrigger
的代码更改为以下代码:

    protected final Trigger getDefaultTrigger()  {

return TriggerBuilder.newTrigger()
         .withSchedule(SimpleScheduleBuilder.simpleSchedule()
        .withIntervalInMilliseconds(DEF_FREQUENCY))
        .startAt(DateBuilder.futureDate(1,  DateBuilder.IntervalUnit.SECOND))
        .build();
}

我觉得你制造触发器的方式有些问题。 请记住,不能对多个作业重用触发器

尝试创建具有唯一标识和组的触发器,如下所示

Trigger everyHourTrigger=newTrigger().withIdentity(“everyWeeklyTrigger”,“group1”)
.startNow().withSchedule(cronSchedule(“0 1***?”)).build();

@4herpsand7derpsago是的,你是对的,你99%在那里,我运行了你的代码,其中只有一个问题,
HttpPollingJob
PollingJob
类中没有默认构造函数,因此调度器无法创建它们的实例

简单解决方案在下面的类中添加以下代码
HttpPollingJobclass

public HttpPollingJob() {
}
public PollingJob() {
}
轮询作业

public HttpPollingJob() {
}
public PollingJob() {
}
宾果,将打印以下消息

工作被解雇!

工作被解雇!

工作被解雇!

如果要重复触发,请在PollingJob中添加以下代码

protected final Trigger getDefaultTrigger() {
    TriggerBuilder<?> triggerBuilder = TriggerBuilder
            .newTrigger()
            .startNow()
            .withSchedule(
                    SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInMilliseconds(DEF_FREQUENCY).repeatForever());

    return triggerBuilder.build();
}
import java.util.Map;

import org.quartz.JobExecutionContext;

public class HttpPollingJob extends PollingJob {
private String serverURL;
private org.slf4j.Logger logger =
    org.slf4j.LoggerFactory.getLogger(HttpPollingJob.class);

public HttpPollingJob(final String nm, final String server) {
    super(nm);

    setServerURL(server);
}
public HttpPollingJob() {
}

public String getServerURL() {
    return serverURL;
}

public void setServerURL(final String server) {
    serverURL = server;
}

@Override
public final void poll(JobExecutionContext context) {

    try {
        Map dataMap = context.getJobDetail().getJobDataMap();
        String nm = (String)dataMap.get("name");
        String url = (String)dataMap.get("url");
        // This is where we would use HttpClient to connect to a web server and poll it.
        System.out.println("Job fired! name:"+nm+" url:"+url);
    }
    catch(Throwable thrown) {
        logger.error(thrown.getMessage());
    }
}
}
更新的HttpPollingJob

protected final Trigger getDefaultTrigger() {
    TriggerBuilder<?> triggerBuilder = TriggerBuilder
            .newTrigger()
            .startNow()
            .withSchedule(
                    SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInMilliseconds(DEF_FREQUENCY).repeatForever());

    return triggerBuilder.build();
}
import java.util.Map;

import org.quartz.JobExecutionContext;

public class HttpPollingJob extends PollingJob {
private String serverURL;
private org.slf4j.Logger logger =
    org.slf4j.LoggerFactory.getLogger(HttpPollingJob.class);

public HttpPollingJob(final String nm, final String server) {
    super(nm);

    setServerURL(server);
}
public HttpPollingJob() {
}

public String getServerURL() {
    return serverURL;
}

public void setServerURL(final String server) {
    serverURL = server;
}

@Override
public final void poll(JobExecutionContext context) {

    try {
        Map dataMap = context.getJobDetail().getJobDataMap();
        String nm = (String)dataMap.get("name");
        String url = (String)dataMap.get("url");
        // This is where we would use HttpClient to connect to a web server and poll it.
        System.out.println("Job fired! name:"+nm+" url:"+url);
    }
    catch(Throwable thrown) {
        logger.error(thrown.getMessage());
    }
}
}
新输出

已触发作业!名称:作业-1 url:http://www.example.com/1

Job已启动!名称:Job-2 url:http://www.example.com/2


Job已启动!名称:Job-3 url:http://www.example.com/3

这是你的构造函数,
作业生成器
查找无参数,因为它们没有定义,所以拒绝生成作业。添加空的无参数,你就可以完成所有设置。

这仍然不起作用……还有其他想法吗?+1寻求帮助!@4herpsand7derpsago你检查我的答案吗?这不公平,我先给出了正确的答案。你怎么能给一个在赏金结束后给出的答案赏金。不道德哇,你给了自己赏金,我们能报告这个答案吗?