【问题标题】:How to instantiate manually the method newJob of quartz jobDetail?如何手动实例化quartz jobDetail的newJob方法?
【发布时间】:2016-08-31 16:26:01
【问题描述】:

我参与了一个项目,但遇到了问题。自动实例化我的对象类型 jobdetail 的 newJob 方法对我没有好处。我需要手动实例化 newJob 以通过我选择的对象将其作为参数传递,但我不知道如何。有任何想法吗?谢谢。

【问题讨论】:

    标签: quartz-scheduler


    【解决方案1】:

    您不能直接将参数传递给作业。 相反,您可以做的是使用JobDataMap,它将由调度程序直接传递,如here 所述。例如(在 Java 中):

    // define the job and tie it to our DumbJob class
    JobDetail job = newJob(DumbJob.class)
      .withIdentity("myJob", "group1") // name "myJob", group "group1"
      .usingJobData("jobSays", "Hello World!")
      .usingJobData("myFloatValue", 3.141f)
      .build();
    

    而且,在工作中,您可以像这样访问地图:

    public class DumbJob implements Job {
    
        public DumbJob() {
        }
    
        public void execute(JobExecutionContext context)
          throws JobExecutionException
        {
          JobKey key = context.getJobDetail().getKey();
    
          JobDataMap dataMap = context.getJobDetail().getJobDataMap();
    
          String jobSays = dataMap.getString("jobSays");
          float myFloatValue = dataMap.getFloat("myFloatValue");
    
          System.err.println("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
        }
      }
    

    希望对你有帮助!

    【讨论】:

    • 所以我明白你的观点,但我想重新定义石英 jobdetail 的方法 newJob。有可能吗?
    • 嗯,这就是系统的工作方式。如果你想改变这一点,我认为你需要从源代码开始。显然这是可能的,但也许它有点太贵了,不是吗?
    • 是的...这种方式太大了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    相关资源
    最近更新 更多