Quartz学习之Lesson3-关于Job和JobDetails的更多信息

当我们自定义一个Job(即,实现Job接口,并将要执行的真实业务放置到execute方法中)后,Quartz在每次执行这个Job时,都会根据这个自定义的Job的class生成不同的对象

JobDataMap

如果给一个Job提供一些定制化的信息呢,例如一些参数值,此时可以通过JobDataMap来实现,例如通过如下的代码来将一些参数值放置到JobDataMap中

// 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();

可以通过如下的方式来取得刚才设置到JobDataMap中的值

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);
    }
  }

如果使用了持久化形式的JobStore的话,可以将JobDataMap中的值存储到数据库中(存储到数据库中的值都将被序列化,因此对于存储到JobDataMap中的值的类型要在存储之前多做考虑)
也可以在Job中定义符合JavaBean规范的setter方法,从而当Job被实例化时,将这些值注入到Job当中,类似如下的形式

public class DumbJob implements Job {


    String jobSays;
    float myFloatValue;
    ArrayList state;

    public DumbJob() {
    }

    public void execute(JobExecutionContext context)
      throws JobExecutionException
    {
      JobKey key = context.getJobDetail().getKey();

      JobDataMap dataMap = context.getMergedJobDataMap();  // Note the difference from the previous example

      state.add(new Date());

      System.err.println("Instance " + key + " of DumbJob says: " + jobSays + ", and val is: " + myFloatValue);
    }

    public void setJobSays(String jobSays) {
      this.jobSays = jobSays;
    }

    public void setMyFloatValue(float myFloatValue) {
      myFloatValue = myFloatValue;
    }

    public void setState(ArrayList state) {
      state = state;
    }

  }

Job “Instances”

可以为不同的Job绑定不同的JobDataMap.
当一个Trigger被触发后,与此相关联的Job就被实例化

Job State and Concurrency

猜你喜欢

转载自blog.csdn.net/LOVE____JAVA/article/details/53288659