简单的 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/