quartzjob传递传输_Quartz之JobListener

问题1:我想在一个任务执行后在执行第二个任务怎么办呢

Quartz:使用JobListener(任务监听器可实现)

下面示例中演示了相互传递,请参见注释

Job1Listener.java

public class Job1Listener implements JobListener {

private static Logger _log = LoggerFactory.getLogger(Job1Listener.class);

public String getName() {

return "job1_to_job2";

}

public void jobToBeExecuted(JobExecutionContext inContext) {

//任务监听器执行任务1之前你可以选择的操作

_log.error("Job1Listener says: Job Is about to be executed.");

//向任务1传递数据

inContext.getJobDetail().getJobDataMap().put("username", "天涯");

}

public void jobExecutionVetoed(JobExecutionContext inContext) {

_log.error("Job1Listener says: Job Execution was vetoed.");

}

public void jobWasExecuted(JobExecutionContext inContext,JobExecutionException inException) {

_log.error("Job1Listener says: Job was executed.");

//执行任务2

JobDetail job2 = newJob(SimpleJob2.class)

.withIdentity("job2")

.usingJobData("username", "david") //向任务2传递数据传递可成功接收

.build();

Trigger trigger = (SimpleTrigger) newTrigger()

.withIdentity("job2Trigger")

.startNow()

.build();

//向任务2传递数据,这里不知怎么回事,传递参数在任务2取值为: null

inContext.getJobDetail().getJobDataMap().put("sex", "男");

try {

// schedule the job to run!

inContext.getScheduler().scheduleJob(job2, trigger);

} catch (SchedulerException e) {

_log.error("出错了...");

e.printStackTrace();

}

}

}

ListenerExample.java

Quartz2个人感觉设计相当灵活,脱离了相互依赖,只需要添加监听器相关设置就行了

注意下面代码:

JobListener listener = new Job1Listener();

Matcher matcher = KeyMatcher.keyEquals(job.getKey());

sched.getListenerManager().addJobListener(listener, matcher);

这个任务1实现了监听器 joblistener,在这个 joblistener中有四个方法实现,在

public void jobWasExecuted(JobExecutionContext inContext,JobExecutionException inException) {

}

中去执行任务2的操作,以次类推的话,它可执行一个任务集合了

38687d1a1ad71d37c86f287056834d1a.gif

public void run() throws Exception {

Logger log = LoggerFactory.getLogger(ListenerExample.class);

SchedulerFactory sf = new StdSchedulerFactory();

Scheduler sched = sf.getScheduler();

JobDetail job = newJob(SimpleJob1.class)

.withIdentity("job1")

.build();

Trigger trigger = newTrigger()

.withIdentity("trigger1")

.startNow()

.build();

JobListener listener = new Job1Listener();

Matcher matcher = KeyMatcher.keyEquals(job.getKey());

sched.getListenerManager().addJobListener(listener, matcher);

sched.scheduleJob(job, trigger);

sched.start();

try {

Thread.sleep(30L * 1000L);

} catch (Exception e) {

}

sched.shutdown(true);

SchedulerMetaData metaData = sched.getMetaData();

log.error("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");

}

SimpleJob1.java

public class SimpleJob1 implements Job {

private static Logger _log = LoggerFactory.getLogger(SimpleJob1.class);

public SimpleJob1() {

}

public void execute(JobExecutionContext context)

throws JobExecutionException {

JobKey jobKey = context.getJobDetail().getKey();

String userName = (String)context.getJobDetail().getJobDataMap().get("username");

_log.error("SimpleJob1 says: " + jobKey + " executing at " + new Date() + ",姓名: " + userName);

}

}

SimpleJob2.java

public class SimpleJob2 implements Job {

private static Logger _log = LoggerFactory.getLogger(SimpleJob2.class);

public SimpleJob2() {

}

public void execute(JobExecutionContext context)

throws JobExecutionException {

JobKey jobKey = context.getJobDetail().getKey();

String userName = (String)context.getJobDetail().getJobDataMap().getString("username");

String sex = (String)context.getJobDetail().getJobDataMap().getString("sex");

_log.error("SimpleJob1 says: " + jobKey + " executing at " + new Date() + ",英文名: " + userName+",性别: " + sex);

}

}

输出结果为:

[ERROR] 2011-08-12 03:56:44.750 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example9.Job1Listener]

Job1Listener says: Job Is about to be executed.

[ERROR] 2011-08-12 03:56:44.765 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example9.SimpleJob1]

SimpleJob1 says: DEFAULT.job1 executing at Fri Aug 12 15:56:44 CST 2011,姓名: 天涯

[ERROR] 2011-08-12 03:56:44.765 下午 DefaultQuartzScheduler_Worker-1 [org.quartz.examples.example9.Job1Listener]

Job1Listener says: Job was executed.

[ERROR] 2011-08-12 03:56:44.765 下午 DefaultQuartzScheduler_Worker-2 [org.quartz.examples.example9.SimpleJob2]

SimpleJob1 says: DEFAULT.job2 executing at Fri Aug 12 15:56:44 CST 2011,英文名: david,性别: null

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2011-08-12 15:57

浏览 10311

评论

4 楼

iotwlw

2015-08-13

//向任务2传递数据,这里不知怎么回事,传递参数在任务2取值为: null

inContext.getJobDetail().getJobDataMap().put("sex", "男");

这句话是给任务一传参吧

38687d1a1ad71d37c86f287056834d1a.gif

3 楼

h416373073

2014-10-23

非常感谢bz的分享

2 楼

liuzidong

2011-12-04

谢谢您的指出,

38687d1a1ad71d37c86f287056834d1a.gif 我也是在学习呀

1 楼

kuro_0505

2011-12-03

inContext.getJobDetail().getJobDataMap().put("sex", "男");   这样传参是错误的,这样是全局的,不是放在job的dataMap上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值