2014-11-10 2 views
1

Проблема с простой конфигурацией кварца, которая просто не работает для меня. У меня есть простая задача «HitUrl», и я хотел бы создать два триггера в xml, которые передают разные URL-адреса в задание. К сожалению, когда вы пытаетесь получить доступ к переданному значению в Job (в Java), возвращается null.Quartz XML - одиночный триггер, несколько заданий, карта данных заданий

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 Code

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" 

    } 

} 

Любые идеи, где я собираюсь здесь не так?

ответ

2

Я думаю, проблема в том, что вы пытаетесь извлечь значение параметра URL из карты данных задания JobDetail в ситуации, когда вы фактически определили параметр на уровне триггера.

Вы должны использовать метод getMergedJobDataMap, определенный в переданном экземпляре экземпляра JobExecutionContext. См. Соответствующий JobExecutionContext JavaDoc.

1

Спасибо за ваш ответ Ян - вы определенно были на правильных строках. Я установил ее, изменив код Java следующим образом:

старого код

JobDataMap jobDataMap = ctx.getJobDetail().getJobDataMap(); 

Нового код

JobDataMap jobDataMap = ctx.getTrigger().getJobDataMap(); 
+0

Если ответ Яны Моравека был правильным и помог вам решить вашу проблему, почему вы не приняли их ответ? – walen

Смежные вопросы