当前位置: 首页 > 知识库问答 >
问题:

石英作业不会执行

茹照
2023-03-14

使用spring 2.5和quartz 1.6.2,我一直试图每分钟触发一个计划任务

我的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个答案

国兴文
2023-03-14

您得到的可能是java.lang.InstantiationException,因为quartz试图实例化一个内部类(解释)。

在outter类中声明您的HelloJob为静态类,或者从UpdatedBWatchDog类中退出并在自己的文件中声明。

 类似资料:
  • 我在Maven/war项目中使用了quartz 2.2.1和Spring 3.2.5。 我的WAR文件在Apache-Tomcat-7.x下部署良好,日志表明所有quartz作业都已加载。麻烦就从这里开始。 有人能解释一下发生了什么吗?在我看来,根本不应该有任何遗漏的触发器。 多谢了。

  • 是否可以添加/删除/修改在Quartz Spring Boot中动态安排的作业(在运行时),由使用我的门户的最终用户。由于计划无法从外部访问,我不知道有什么办法。基本上,我需要将所有的时间表信息存储到数据库中并访问它们。Im构建的门户将被大量用户使用,实现这一目标的正确解决方案是什么? 否则我可以像下面这样使用cron吗 每5 mns扫描一次作业以实现此目的。

  • 我正在使用quartz调度器来调度一个Spring批处理作业。应用程序启动时没有任何异常,但它从不激发任何作业。 它运行得很成功,但经过更多的开发后,它停止了工作。我无法弄清楚我到底改变了什么配置导致了这一点。 有谁可以建议检查点在使用“JobRepositoryFactoryBean”,如果我没有或问题在其他地方。

  • 我已经将quartz配置为在集群中工作这里是我的简单quartz配置 我有两个节点正在执行我的作业,但是,当我计划每秒运行某个任务时,我可以看到它只在Node1上执行。如果我暂停node1上的调度程序,任务将移动到node2,并且即使当node1再次联机时也会坚持它。我如何可能使执行在节点之间均匀地偏离? 谢谢

  • 我想用Quartz实现下面的算法,但不确定是否可以做到。这是我第一次尝试使用石英。 用户通知作业-此作业计算每月报告并向用户发送电子邮件,它需要用户id和用于生成自定义用户报告的其他参数 可能需要生成10,000多个这样的报告 null 如何确保每月作业在单个事务中执行,以便识别所有需要每月报告的用户,并安排作业通知他们 如何立即安排作业在创建它们的作业之后立即执行? 我用的是Spring 3.2

  • 我有一个Sprint Boot-Java8应用程序,它有一个quartz作业,我在启动时配置该作业并设置一个时间表。该作业按照计划自动运行,这与您对quartz作业的期望一样。然而,现在我希望能够允许用户通过点击前端上的一个按钮手动触发这些作业,而不会扰乱该作业的正常调度。这是我所有的相关档案。 但每次运行应用程序并点击控制器的方法时,都会在控制台中出现以下错误: 我到底做错了什么?如何使此作业按