本人刚刚接触quartz,对于quartz的使用还不是很熟悉,遇到一个问题,每次向scheduler中添加一个任务时,需要一个jobDetail和一个trigger,在jobDetail中需要指定一个实现Job接口的类,然后根据trigger的方式执行Job类中的execute()方法;
    问题来了,如果现在我需要添加一个统计的任务,我建立一个实现了Job接口的MyJob类,然后在execute()方法中写好统计代码,
实例化 JobDetail jobDetail = new JobDetail("job1222224",Scheduler.DEFAULT_GROUP, MyJob.class);此时,有一些参数需要外部指定,比如统计的数据库地址,用户名,密码,表名等,但是如果要有多个jobDetail来添加到scheduler中时,每个jobDetail所对应的Job类能否只有一个?如何能实现每个MyJob对应相应的参数?难道需要多个类似的MyJob类?我使用的是持久化的方式 :org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX另外,我想实现各个任务的启动,停止,暂停,删除等管理功能,
不知道该如何实现,请各位高人指点!谢谢!!!

解决方案 »

  1.   


    我想可以用Spring集成Quartz,这样的话job可以是一个pojo,它也由Spring的IoC容器管理。 这样的话,参数就好办了。你可以注入。 我下面给你个代码给你打个比方啊。package job;import java.text.SimpleDateFormat;
    import java.util.Date;import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;@Component
    public class SimpleJob {

    @Value("maldinisky")
    private String someText; public void execute() {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println(sdf.format(new Date()) + " " + this.someText);
    }
    }
    你想要什么注入来就好了。这样的话,一个Job对应一个POJO,很好管理。我是这么用的。
    于Spring的集成方式我就不啰嗦了,百度一下,你就知道。
      

  2.   


    这些东西在applicationContext.xml 里可以用 Cron表达式配置的。
      

  3.   

    很感谢你的回答,有几个问题想问下:请问,是不是我如果此时需要添加10个JobDetail到scheduler里去,我就需要在后台生成10个Job和10个pojo吗?不能只用一个Job类就搞定吗?
    我对Cron表达式的理解就是能实现比较灵活的按照相关的规则执行相关的Job,而我想要实现的是,比如一个列表,相关列为 “任务名称,任务状态,操作”,然后再操作里面有“暂停任务,启动任务,删除任务”等功能按键,点击实现相关的功能,我不知道Cron表达式是否能实现这样的功能,如果有的话,可否给我例子参考下?
      

  4.   


    确实如此,10个job对应10个pojo。不过我想这也不麻烦。你说呢?
    能不能用程序控制和如何控制我不清楚,你可以参考一下quartz的官方网站和spring api文档。
    http://www.quartz-scheduler.org/docs/index.html
      

  5.   

    谢谢yingzhuo2011给我的回答,经过我后来的各方查询,已经可以使用1个Job就完成多个操作,方法是采用JobStoreTX持久化时用:jobDetail.getJobDataMap().put("param1","你要传的参数");然后在job的execute中取就可以了实现任务的“暂停任务,启动任务,删除任务”的功能也能实现了,具体代码为:scheduler.pauseJob("Job名称","组名");//暂停
    scheduler.resumeJob("Job名称","组名");//恢复
    scheduler.deleteJob("Job名称","组名");//删除总算解决了,结贴了