使用Quartz,创建JobDetail时是这样的:
JobDetail jobDetail = JobBuilder.newJob(SimpleJob.class).withIdentity("Job1", "JobGroup1").build();
老版本的Quartz里面是这样的
JobDetail jobDetail = new JobDetail("job1","jGroup1", SimpleJob.class);这边就碰到一个问题,SimpleJob实现了Quartz的Job接口,SimpleJob初始化的时候是通过JobBuilder.newJob(SimpleJob.class)或者new JobDetail("job1","jGroup1", SimpleJob.class)这种反射的初始化方式来的。我的SimpleJob还有构造函数,每次触发前有好多属性需要set()一下。请问,这种问题怎么解决?

解决方案 »

  1.   

    貌似我找到了一个解决办法:创建JobDetail后,可以获取JobDataMap jobDataMap = jobDetal.getJobDataMap();
    Job接口的实现类里面可以通过excute方法的参数JobExecutionContext context获取JobDetail对象。
      

  2.   

    你所说的属性,是不是就是JOB运行需要的参数啊,我一般是在JobDetail定义是PUT在JobDataMap中        collectJobDetail = new JobDetail("JOB_"+objId, Scheduler.DEFAULT_GROUP,jobClass);
            collectJobDetail.getJobDataMap().put("hostIp",hostIp);
            collectJobDetail.getJobDataMap().put("port",port);
            Trigger trigger = TriggerUtils.makeMinutelyTrigger(minuteInterval);
    trigger.setName("JOB_Trigger_"+objId);
    trigger.setStartTime(new Date());
    quartzScheduler.scheduleJob(collectJobDetail,trigger);在JOB的execute方法中再取出来        JobDataMap jdMap = context.getJobDetail().getJobDataMap();
    String hostIp = jdMap.getString("hostIp");
    String port = jdMap.getString("port");
    String objId = jdMap.getString("objId");