使用quartz定制计划任务的问题

newyu1127 2007-12-06 05:50:51
各位兄弟:
看了一些有关quartz的文档,试着写一个例子,用一个TestJob类实现Job
public class TestJob implements Job
{
public TestJob(){

}
public void execute(JobExecutionContext context) throws JobExecutionException
{
JobDetail jobDetail = context.getJobDetail();///通过这个取得调用任务的对象
System.out.println("job executing..."+jobDetail.getName()); }
}
测试类为
public class TestMain {
try {
JobDetail jobDetail =
new JobDetail("testJob", "jGroup1",TestJob.class); ///声明执行哪个操作

//触发器的设置(设置了两个触发器)
CronTrigger cronTrigger1 = new CronTrigger("trigger1_1", "tGroup1");
CronExpression cexp1 = new CronExpression("0 15 10 15 * ?");//每月15日10:15分运行。
cronTrigger1.setCronExpression(cexp1);

CronTrigger cronTrigger2 = new CronTrigger("trigger1_2", "tGroup1");
CronExpression cexp2 = new CronExpression("0 15 18 L * ?");//每月最后一天18:15分运行。
cronTrigger2.setCronExpression(cexp2);
//启动任务
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
//为同一个工作绑定两个触发器
scheduler.scheduleJob(jobDetail, cronTrigger1);
scheduler.scheduleJob(jobDetail, cronTrigger2);

scheduler.start();

} catch (Exception e) {
e.printStackTrace();
}
}
功能是为了在两个不同时间触发同一个操作。可是一运行就出错:
org.quartz.ObjectAlreadyExistsException: Unable to store Job with name: 'testJob' and group: 'jGroup1', because one already exists with this identification.
at org.quartz.simpl.RAMJobStore.storeJob(RAMJobStore.java:222)
at org.quartz.simpl.RAMJobStore.storeJobAndTrigger(RAMJobStore.java:195)
at org.quartz.core.QuartzScheduler.scheduleJob(QuartzScheduler.java:703)
at org.quartz.impl.StdScheduler.scheduleJob(StdScheduler.java:255)
at testqz.TestMain.startSchedule(TestMain.java:131)

我把scheduler.scheduleJob(jobDetail, cronTrigger2);这句屏掉倒是可以运行正常了。不会吧,难道同一动作只能绑定一个触发器?!!quartz不会连这种功能都实现不了吧?!!!

还有就是如果scheduler.start();后,我还想再增加任务,直接scheduler.scheduleJob可以吗?
如果scheduler.start();后我要删除某个Trigger,用什么方法?
如果scheduler.start();后我要删除某个job,但又想保留Trigger,用什么方法?

谢谢赐教。如果有详细解答,分不是问题。


...全文
2464 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT布道 2009-09-28
  • 打赏
  • 举报
回复
quartz里面的jobname和groupname加起来就是job对象,这个必须每次都不一样,比如你是使用的持久化数据库的方式,这两个字段是关键字,你觉得可以重复吗,同理,triggername和triggergroup也是一样的道理,他们两个组合成一个trigger的对象。在数据库里,他们两个也是关键字。所以,他们两个组合起来必须是唯一的对象!!!
waveicesky 2008-04-14
  • 打赏
  • 举报
回复
请问楼上的(hjysuccess),怎样得到job的状态?
现在急用,敬请回复!
hjysuccess 2007-12-17
  • 打赏
  • 举报
回复
可以根据任务调度的条件来判断,需要执行那一个任务,那么首先需要获得该任务的对象,根据该对象获得该任务的状态,那么就可以判断该任务是否正在执行、执行过了、未执行、执行成功或者执行失败等。
newyu1127 2007-12-17
  • 打赏
  • 举报
回复
怎么就没人用过吗?
dracularking 2007-12-12
  • 打赏
  • 举报
回复
关注
newyu1127 2007-12-11
  • 打赏
  • 举报
回复
TO xiyuan1999 :
兄台可能还没完全明白我的意思,其实我的程序要求是:
每天定时从数据库取出任务计划(操作和触发器表达式),然后判断当前scheduler是否有工作正在运行(或者说有
触发器正在触发中),如果没有,那么就停止scheduler,将数据库取到的一系列计划任务重新加载。如果有,那么就延时以待至可以重新加载为止。因为这些计划任务是存在数据库中的,而且很可能经常修改,所以通过配置文件是无法达到我程序的需要的吧。

其实我就想问:
如果scheduler.start();后我要删除某个Trigger,用什么方法?
如果scheduler.start();后我要删除某个job,但又想保留Trigger,用什么方法?
若某一时刻,我要判断当前scheduler中所有任务是否有正在工作的,怎么判断?
jingtao8177 2007-12-11
  • 打赏
  • 举报
回复
up
zhoche2008 2007-12-11
  • 打赏
  • 举报
回复
没用过.顶下.
xiyuan1999 2007-12-07
  • 打赏
  • 举报
回复
以上我是配置了2个任务的

代码在帖子里面
newyu1127 2007-12-07
  • 打赏
  • 举报
回复
谢谢楼上的,我试过了
JobDetail jobDetail2 =
new JobDetail("testJob2", "jGroup1",TestJob.class);
然后scheduler.scheduleJob(jobDetail2, cronTrigger2);这样是正常的。难道quartz中只能这样调用,即使使用的是同一个JOB类,也要重新new一个JobDetail对象,才能加入任务?
还有
如果scheduler.start();后我要删除某个Trigger,用什么方法?
如果scheduler.start();后我要删除某个job,但又想保留Trigger,用什么方法?
若某一时刻,我要判断当前scheduler中所有任务是否有正在工作的,怎么判断?
xfzhang83 2007-12-07
  • 打赏
  • 举报
回复
jobDetail new两个看看.没试过两个工作的.
newyu1127 2007-12-07
  • 打赏
  • 举报
回复
都没人用过quartz吗?

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧