Quartz作业没有被执行

时间:2014-03-06 13:23:07

标签: java spring quartz-scheduler

我坚持尝试使用弹簧2.5&amp ;;每分钟发射一次预定的任务。石英1.6.2

显然这个bean已经启动并很好地打印出“工作正常”以便std out, 但是工作似乎没有被执行 - 没有打印出来的字符串来记录 (输出中没有“hello quartz”)。

我的xml文件是:

<bean id="scheduler"
    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="autoStartup">
        <value>true</value>
    </property>
</bean>

<bean id="UpdateDBWatchdog" class="com.db.update.task.watchdog.UpdateDBWatchdog"
    lazy-init="false" init-method="init">
    <constructor-arg ref="scheduler" />
</bean>

我的代码是:

import org.quartz.CronExpression;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;

public class UpdateDBWatchdog {

    private Scheduler scheduler;

    public UpdateDBWatchdog(Scheduler scheduler) {
        this.scheduler = scheduler;
    }

    public void init() {
        try {

            CronTrigger ct = new CronTrigger();
            ct.setName("dummyTriggerName");
            String expression = "* * * * * ?";

            boolean valid = CronExpression.isValidExpression(expression);
            if (valid) {
                ct.setCronExpression(expression);
            } else {
                throw new RuntimeException();
            }

            JobDetail job = new JobDetail();
            job.setName("dummyJobName");
            job.setJobClass(HelloJob.class);

            scheduler.scheduleJob(job, ct);
            scheduler.start();
            System.out.println("Works fine!");

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    private class HelloJob implements Job {
        @Override
        public void execute(JobExecutionContext arg0) throws JobExecutionException {
            System.out.println("Hello Quartz!");
        }

    }
}

1 个答案:

答案 0 :(得分:3)

可能你得到java.lang.InstantiationException因为quartz正在尝试实例化内部类explanation)。

在outter类中将您的HelloJob声明为 static 类,或从UpdateDBWatchdog类中退出并在自己的文件中声明。