java - Quartz XML - 单触发器、多个作业、作业数据映射

标签 java quartz-scheduler

简单的 quartz 配置存在问题,该配置对我来说不起作用。我有一个简单的“HitUrl”作业,我想在 xml 中创建两个触发器,将不同的 URL 传递到作业中。不幸的是,当尝试访问作业中传递的值(在 Java 中)时,返回 null。

XML 配置

<job-scheduling-data
    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"
    version="1.8">

    <schedule>

        <!-- Executes Hit URL Standard Job -->
        <job>
            <name>HitURL</name>
            <group>DEFAULT</group>
            <job-class>standardjobs.HitUrl</job-
        </job>

        <trigger>
            <cron>
                <name>HitFirstURL</name>
                <group>DEFAULT</group>
                <job-name>HitURL</job-name>                
                <job-data-map>
                    <entry>
                        <key>url</key>
                        <value>itworked</value>
                    </entry>
                </job-data-map>                   
                <cron-expression>0 0/1 * 1/1 * ? *</cron-expression>                
            </cron>
        </trigger>

    </schedule>

</job-scheduling-data>

Java 代码

package standardjobs;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class HitUrl implements Job {

    @Override
    public void execute(final JobExecutionContext ctx) throws JobExecutionException {
        System.out.println("================= HIT URL EXECUTING ======================="); 

        //Retrieve the URL keypair from the job data map
        JobDataMap jobDataMap = ctx.getJobDetail().getJobDataMap();        
        String url = jobDataMap.getString("url");

        System.out.println("Hitting url "+url); //Just says "Hitting url: null"

    }

}

有什么想法我在这里出错了吗?

最佳答案

我认为问题在于,当您实际在触发器级别定义了参数时,您正尝试从 JobDetail 的作业数据映射中提取 URL 参数值。

您应该使用传递的 JobExecutionContext 实例中定义的 getMergedJobDataMap 方法。查看相关JobExecutionContext JavaDoc .

关于java - Quartz XML - 单触发器、多个作业、作业数据映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26846551/

相关文章:

java - 如何在上一个或下一个工作日运行 Quartz Scheduler

java - 为什么Quartz作业停止触发并且触发器的状态从WAITING变为ERROR?

java - 等同于 Java 中的 C# ObservableCollection

Java 编译时检查异常

java - 使用 Java 的默认包是一种不好的做法吗?

java - 创建自定义 OAuth 登录页面和自定义 jwt token

java - 如何从 quartz 表中删除未使用的触发器

quartz-scheduler - Quartz 线程池替换为池化执行器服务

c# - 使用 "Object Reference not set to an instance of an object"运行 Quartz 作业时出错

java - 修改Javadoc