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

组织。石英JobPersistenceException:触发器引用的作业(DEFAULT.tryJob)不存在

伊裕
2023-03-14

我的xml文件

<?xml version='1.0' encoding='utf-8'?>
<job-scheduling-data version="2.0"
                     xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                     xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData
                     http://www.quartz-scheduler.org/xml/job_scheduling_data_2_0.xsd">
    <schedule>
        <job>
            <name>tryJob</name>
            <group>test_group</group>
            <job-class>HelloJobB</job-class>
            <durability>true</durability>
            <recover>false</recover>
        </job>
        <trigger>
            <cron>
                <name>testTrigger</name>
                <group>test_group</group>
                <description>try</description>
                <job-name>tryJob</job-name>
                <cron-expression>0 57 12 1/1 * ? *</cron-expression>
            </cron>
        </trigger>
    </schedule>
</job-scheduling-data>

和我的财产档案

org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.jobFactory.class = org.quartz.simpl.SimpleJobFactory
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 5
org.quartz.dataSource.quartzDataSource.driver = org.postgresql.Driver
org.quartz.dataSource.quartzDataSource.URL = jdbc:postgresql://localhost:5432/quartz
org.quartz.dataSource.quartzDataSource.user = quartz
org.quartz.dataSource.quartzDataSource.password = mask1234
org.quartz.dataSource.quartzDataSource.maxConnections = 9

和我的主方法类文件

package quartz;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathException;

import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.quartz.simpl.CascadingClassLoadHelper;
import org.quartz.xml.ValidationException;
import org.quartz.xml.XMLSchedulingDataProcessor;
import org.xml.sax.SAXException;

import com.mkyong.io.BufferedReaderExample;

public class JobsWithXML {


    public static Scheduler getScheduler() throws SchedulerException{

        SchedulerFactory stdSchedulerFactory = new StdSchedulerFactory("server.properties");
        Scheduler scheduler = stdSchedulerFactory.getScheduler();
        scheduler.start();
        return scheduler;
    }

    public static String readFile(String path) throws IOException{
        StringBuilder sb = new StringBuilder();
        BufferedReader br = new BufferedReader(new FileReader(path));
        String sCurrentLine = br.readLine();
        while (sCurrentLine != null) {
             sb.append(sCurrentLine);
             sCurrentLine = br.readLine();
        }
       return sb.toString();
    }

    public static void main(String[] args) {
         CascadingClassLoadHelper clhelper = new CascadingClassLoadHelper();
         clhelper.initialize();
        XMLSchedulingDataProcessor xmlJobLoader;
        try {
            xmlJobLoader = new XMLSchedulingDataProcessor(clhelper);
            String fileName = JobsWithXML.class.getResource("simpleJobs.xml").getPath();
            InputStream inStream = new ByteArrayInputStream(readFile(fileName).getBytes()); 
            String systemId = XMLSchedulingDataProcessor.QUARTZ_SYSTEM_ID_JAR_PREFIX;
            Scheduler  scheduler = getScheduler();
            xmlJobLoader.processStreamAndScheduleJobs(inStream, systemId, scheduler);
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ValidationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (XPathException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }



}

当运行这个主方法时,它总是抛出异常

org.quartz.JobPersistenceException: The job (DEFAULT.tryJob) referenced by the trigger does not exist.
    at org.quartz.simpl.RAMJobStore.storeTrigger(RAMJobStore.java:420)
    at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:886)
    at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:259)
    at org.quartz.xml.XMLSchedulingDataProcessor.scheduleJobs(XMLSchedulingDataProcessor.java:1171)
    at org.quartz.xml.XMLSchedulingDataProcessor.processStreamAndScheduleJobs(XMLSchedulingDataProcessor.java:531)
    at quartz.JobsWithXML.main(JobsWithXML.java:58)

但在xml文件中默认组不使用,那么为什么在我更改作业组名称时它总是抛出异常默认其工作,但在组名称标记中放入任何名称其抛出异常为什么

共有1个答案

商弘义
2023-03-14

我认为你在所有调度器属性中使用相同的数据源名称,你可以尝试所有调度器的唯一数据源名称

 类似资料:
  • 我在使用quartz scheduler运行web应用程序时遇到以下错误。 我使用两个数据库连接和石英,我想使用德比,所以我给德比事务管理器在我的配置文件。 此配置文件中的问题是什么,quartz调度程序如何尝试访问数据库。 我的配置文件如下所示:

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

  • 我们使用quartz调度器创建一个带有触发器名称和触发器组的触发器,它将在15分钟的间隔被触发。 我们希望在任何时间点手动触发时间表。因此,我们所做的就是获取与我们创建的计划相关联的作业的触发键细节,并尝试使用以下API触发作业。 用上面提到的API激发作业时(即尝试手动激发作业)的Quartz日志: 能不能有人请让我知道我们如何才能使时间表是触发与原来的工作相关联的触发器。

  • 我想用quartz scheduler使用jdbc数据存储立即执行作业~。然而,即使我使用now()或调用triggerjob进行调度,在调度和触发器fire之间也有20-30秒的延迟。 我尝试用一个简单的触发器执行作业: 并且我还尝试用调度程序触发: 下面是显示延迟的侦听器日志。

  • 问题内容: 有没有一种方法可以删除带有特定作业的预定触发器?似乎删除触发器的唯一方法是删除整个作业,然后重新注册该作业并触发。 我有一份可能有100多个触发器的作业,我真的不想删除该作业,而只需要删除1个触发器就重新注册所有触发器。 另外,是否有一种方法可以在配置触发器后立即停止调度程序执行作业? 谢谢 问题答案: 尝试 这接受触发器和组名作为参数,并且只会删除指定的触发器,而不是作业。 Quar

  • 使用spring 2.5和quartz 1.6.2,我一直试图每分钟触发一个计划任务 我的xml文件是: 我的代码是: