有一个简单的石英配置问题,这对我不起作用。我有一个简单的" HitUrl" job,我想在xml中创建两个触发器,将不同的URL传递给作业。不幸的是,当尝试访问Job中传递的值(在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"
}
}
我在这里出错的任何想法?
答案 0 :(得分:2)
我认为问题在于,当您在触发级别实际定义参数时,您正尝试从JobDetail的作业数据映射中提取URL参数值。
您应该使用传递的JobExecutionContext实例中定义的getMergedJobDataMap方法。请参阅相关的JobExecutionContext JavaDoc。
答案 1 :(得分:1)
感谢你的答复Jan - 你肯定是在正确的路线上。我通过更改java代码修复它,如下所示:
旧代码
JobDataMap jobDataMap = ctx.getJobDetail().getJobDataMap();
新代码
JobDataMap jobDataMap = ctx.getTrigger().getJobDataMap();