石英调度器不返回值方法每 3 分钟执行一次



我们使用Quartz运行一个计划,并从executeinternal方法中的表中获取更新的数据,但是如何从main方法访问该java对象。

这是代码:

public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            Scheduler scheduler = new StdSchedulerFactory().getScheduler();
            JobDetail jobDetail = new JobDetail("SlaTime", "SlaTimeGroup",
                    SlaUptimeImpl.class);
            CronTrigger cronTrigger = new CronTrigger("SlaTrigger", "SlaGroup",
                    "0/10 * 0-23 ? * *");
            scheduler.scheduleJob(jobDetail, cronTrigger);
            scheduler.start();

        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

在这里,我们在此SlaUptimeImpl类中执行查询,但无法在此处获取返回数据,因为我在返回类型为 voidExecuteInternal方法中执行查询。

有人在这个问题上帮助我。

提前感谢,马赫什

你可以为你的工作提供一个数据映射,这要归功于 JobBuilder#usingDataMap()。我认为您可以将"观察者"放入此地图中,在作业执行时检索观察者,并通知它结果。

计划作业时:

JobDataMap map = new JobDataMap();
map.put("myObserver", new MyObserver());
JobDetail jobDetail = JobBuilder.newJob(SlaUptimeImpl.class).withIdentity("SlaTime", "SlaTimeGroup").usingJobData(map).build();

在您的工作中:

public void execute(final JobExecutionContext context) throws JobExecutionException {
    ...
    ((MyObserver) context.getJobDetail().getJobDataMap().get("myObserver")).notify(result);
}

最新更新