java - quartz 我如何将 JobExecutionContext 和 Scheduler 的范围更改为类级别?

标签 java spring quartz-scheduler scheduling job-scheduling

在执行内部方法中,我得到了对象,但在其执行完成后,类级变量再次变为NULL?为什么?

public class CampaignJob extends QuartzJobBean {

Scheduler scheduler ;
JobExecutionContext jobExecutionContext ;


@Override
protected void executeInternal(JobExecutionContext jobCtx)
        throws JobExecutionException {
    // TODO Auto-generated method stub
    System.out.println("ExecuteInternal method is called.....");
    SchedulerContext schedCtx = null;
    // jobCtx.getTrigger().getFinalFireTime().setSeconds(0);

    jobCtx.getTrigger().setStartTime(new Date());

    try {
        schedCtx = jobCtx.getScheduler().getContext();
        ApplicationContext appCtx = (ApplicationContext) schedCtx.get("applicationContext");

        //here i am getting scheduler obj i want ot use in other method
        scheduler = jobCtx.getScheduler();
        jobExecutionContext = jobCtx;
    } catch (SchedulerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

最佳答案

在各个作业执行之间不会保留实例变量,因为 Quartz 会为每个作业执行创建一个新的 JobDetail (CampaignJob) 实例。

请注意,JobExecutionContext 实例始终特定于特定作业执行(例如,它指的是执行作业的触发器),因此在各个作业执行之间保留它没有任何意义。

如果您想在各个作业执行之间保留任何数据,您可能需要查看 Quartz StatefulJob 接口(interface),该接口(interface)使 Quartz 持久保存对 JobDataMap 所做的更改(可通过 JobExecutionContext 访问)。考虑到 Quartz 使用标准 Java 序列化 API 来序列化和反序列化 JobDataJMap 内容,因此存在一些关于应该/不应该放入 JobDataMap 中的规则。

关于java - quartz 我如何将 JobExecutionContext 和 Scheduler 的范围更改为类级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24158235/

相关文章:

java - 如何使用maven版本插件选择下一个版本号?

java - Android - ExoPlayer 在没有太多缓冲的情况下尽快开始播放

Java GC 安全点

java - 无法写入 JSON : failed to lazily initialize a collection

java - Quartz Scheduler - 待机直至第二天

java - 如何从 XML 文件中删除 XML 标签而不对标签名称进行硬编码

java - System.out.println 不打印到控制台

java - Spring Integration - ErrorMessageExceptionTypeRouter NullPointerException - 如何修复它?

c# - Cron 表达式验证器

java - 在集群环境中使用 Quartz