簡體   English   中英

使用Quartz的動態作業數據

[英]Dynamic Job Data using Quartz

當我的進程收到消息時,它需要啟動一個計時器並在X秒內執行一些邏輯。 這些作業需要存儲在JDBC存儲中,據我所知,這可能與此問題無關。

根據我讀過的內容,我應該能夠為一個Job類分配一個具有不同類似屬性值的JobDataMap,但是我無法找到任何文檔或示例來支持這個用例。 也許我的Google-fu很弱。

那有意義嗎? 有一個Job類,並以某種方式存儲JobDataMap來填充該Job類並在每個消息的基礎上運行它?

org.quartz.Trigger既有getJobDataMap() (必要時會new一個)和setJobDataMap()來獲取觸發器的JobDataMap

最簡單的用法是:

Trigger t = new SimpleTrigger(...);
t.getJobDataMap().put("foo", "bar");

要使用現有的值映射進行初始化:

Map data = new HashMap();
data.put("foo", "bar");

t.setJobDataMap(new JobDataMap(data));

在作業執行時獲取數據

public void execute(JobExecutionContext context) throws JobExecutionException
{
   String fooValue = context.getMergedJobDataMap().get("foo");
}

本教程中有關JobDataMap的文檔

嗨cansando(你說西班牙語???)。 我將舉例說明Quartz。

public static void main(String[] args) {

        SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
        try {

            Scheduler sched;
            sched = schedFact.getScheduler();

            sched.start();

            JobDetail jobd = new JobDetail("instruccion", "instrucciones",
                    Mensaje.class);

//          TriggerExample trigger = new TriggerExample("instruccion",
//                  "instrucciones");

            jobd.setRequestsRecovery(true);
            SimpleTrigger trigger2 = new SimpleTrigger("lanzador principal", "lanzadores", "instruccion","instrucciones" , Calendar.getInstance().getTime(), null, 100, 10000);

            trigger2.setMisfireInstruction(SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW);
            sched.scheduleJob(jobd, trigger2);

            //      
            // }
        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    };


public class Mensaje implements Job {


    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        System.out.println("Hola Mundo");

    }

}


public class TriggerExample extends Trigger {

    /**
     * 
     */
    private static final long serialVersionUID = -4926331843008217753L;

    Date fechaAEjecutar;


    public TriggerExample(){

        super();
    }

    public TriggerExample(String name){
        super(name);
    }

    public TriggerExample(String name, String group){
        super(name, group);
    }

    public TriggerExample(String name, String group,String jobname, String jobgroup){
        super(name,group,jobname,jobgroup);
    }



    @Override
    public Date computeFirstFireTime(Calendar arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public int executionComplete(JobExecutionContext arg0,
            JobExecutionException arg1) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public Date getEndTime() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Date getFinalFireTime() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Date getFireTimeAfter(Date arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Date getNextFireTime() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Date getPreviousFireTime() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Date getStartTime() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean mayFireAgain() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void setEndTime(Date arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void setStartTime(Date arg0) {
        this.fechaAEjecutar = arg0;
        System.out.println("Cargue la fecha el data con valor\n");
        System.out.println(this.fechaAEjecutar.getTime());

    }

    @Override
    public void triggered(Calendar arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void updateAfterMisfire(Calendar arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void updateWithNewCalendar(Calendar arg0, long arg1) {
        // TODO Auto-generated method stub

    }

    @Override
    protected boolean validateMisfireInstruction(int arg0) {
        // TODO Auto-generated method stub
        return false;
    }

}

在這一行中SimpleTrigger trigger2 = new SimpleTrigger(“lanzador principal”,“lanzadores”,“instruccion”,“instrucciones”,Calendar.getInstance()。getTime(),null,100,10000);

你能設定執行和重復的時間嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM