當我的進程收到一條消息時,它需要啓動一個計時器並在X秒內執行一些邏輯。這些作業需要存儲在JDBC存儲中,據我所知,這可能與此問題無關。使用Quartz的動態作業數據
根據我讀過的內容,我應該能夠爲具有類似屬性的JobDataMap分配一個JobDataMap作爲單個Job類,但我無法找到任何文檔或示例來支持此用例。也許我的Google-fu很弱。
這有道理嗎?有一個Job類,並以某種方式存儲JobDataMap來填充該Job類並在每個消息的基礎上運行它?
當我的進程收到一條消息時,它需要啓動一個計時器並在X秒內執行一些邏輯。這些作業需要存儲在JDBC存儲中,據我所知,這可能與此問題無關。使用Quartz的動態作業數據
根據我讀過的內容,我應該能夠爲具有類似屬性的JobDataMap分配一個JobDataMap作爲單個Job類,但我無法找到任何文檔或示例來支持此用例。也許我的Google-fu很弱。
這有道理嗎?有一個Job類,並以某種方式存儲JobDataMap來填充該Job類並在每個消息的基礎上運行它?
org.quartz.Trigger
既有getJobDataMap()
(這將new
了一個如有必要),setJobDataMap()
得到觸發的JobDataMap。
最簡單的用法是:
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");
}
Trigger t = new SimpleTrigger(...);
t.getJobDataMap().put("foo", "bar");
要與現有的地圖值初始化
Documentation on JobDataMap in the tut orial。
嗨坎桑(你會說西班牙語???)。 我會給你我的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觸發2 =新SimpleTrigger( 「lanzador主要」, 「lanzadores」, 「instruccion」, 「instrucciones」,Calendar.getInstance()的getTime(),NULL,100,10000);
你能設定執行和重複的時間嗎?