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

来源:互联网 发布:centos yum mirror 编辑:程序博客网 时间:2024/05/06 21:27

当我们自定义一个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

0 0