代码回顾

    Quartz 需要了解你可能希望该作业的实例拥有的各种属性,这是通过JobDetail 类完成的。

     JobDetail 实例是使用 JobBuilder 类构建的。  

  1. JobDetail job = JobBuilder.newJob(MyJob.class)
  2. .withIdentity("job1", "group1")
  3. .build();
  4.  
  5. // Trigger the job to run now, and then repeat every 5 seconds
  6. Trigger trigger = TriggerBuilder.newTrigger()
  7. .withIdentity("trigger1", "group1")
  8. .startNow()
  9. .withSchedule(SimpleScheduleBuilder.simpleSchedule()
  10. .withIntervalInSeconds()
  11. .repeatForever())
  12. .build();
  13.  
  14. // Grab the Scheduler instance from the Factory
  15. Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
  16. // and start it off
  17. scheduler.start();
  18. // Tell quartz to schedule the job using our trigger
  19. scheduler.scheduleJob(job, trigger);

JobDetail的生命周期

    1.我们给调度程序提供了一个 JobDetail 实例,并且它知道在构建 JobDetail 时只需提供作业的类就可以执行的工作类型。

      2.调度程序执行任务时,每个(以及每个)时间都在调用它的 execute(..) 方法之前创建一个类的新实例。 
    3.当执行完成时,对作业类实例的引用被删除,然后实例被垃圾收集。

JobDataMap

     这种行为的一个分支是,作业必须有一个无参数的构造函数(当使用默认的JobFactory实现时)。 
     另一个分支是,在作业类上定义状态数据字段是没有意义的,因为它们的值不会在作业执行之间保留。

      若需要传数据,则可以使用JobDataMap

      JobDataMap 可以用来保存任何数量(可序列化)的数据对象,您希望在它执行时将它们提供给作业实例。 
                 JobDataMap 是 Java Map 接口的一个实现,它提供了一些用于存储和检索原始类型数据的便利方法。

  代码实现:

   这里有一些快速的片段,可以将数据输入 JobDataMap,同时定义/构建 JobDetail,然后将作业添加到调度器:

  1. JobDetail job = JobBuilder.newJob(HelloJob.class)
  2. .withIdentity("job1", "group1")
  3. .usingJobData("user", "goxcheer")
  4. .usingJobData("words", "Hello Quartz")
  5. .build();

   执行时我们可以将这些数据拿到,方式如下:

    

  1. public HelloJob() {
  2. super();
  3. }
  4.  
  5. public void execute(JobExecutionContext context) throws JobExecutionException {
  6. JobKey key = context.getJobDetail().getKey();
  7. JobDataMap jobDataMap = context.getJobDetail().getJobDataMap();
  8. String str1 =jobDataMap.getString("user");
  9. String str2 = jobDataMap.getString("words");
  10. System.out.println("Instance:"+key+ " user:"+str1+" words:"+str2);
  11. }

MergedJobDataMap

    如果你添加 setter 方法工作类,对应键的名字 JobDataMap(如setJobSays数据(字符串val)方法在上面的示例中),然后 Quartz 默认 JobFactory 实现将自动调用这些 setter 当工作被实例化,从而防止需要显式地获得值的 map 在你的执行方法。

    对应的不同代码:

  1. public class HelloJob implements Job{
  2.  
  3. private String user;
  4. private String words;
  5.  
  6. public HelloJob() {
  7. super();
  8. }
  9.  
  10. public void execute(JobExecutionContext context) throws JobExecutionException {
  11. JobKey key = context.getJobDetail().getKey();
  12. context.getMergedJobDataMap(); //此处不同
  13. System.out.println("Instance:"+key+ " user:"+user+" words:"+words);
  14. }
  15.  
  16. public String getUser() {
  17. return user;
  18. }
  19.  
  20. public void setUser(String user) {
  21. this.user = user;
  22. }
  23.  
  24. public String getWords() {
  25. return words;
  26. }
  27.  
  28. public void setWords(String words) {
  29. this.words = words;
  30. }
  31. }

 JobInstance

   您可以创建一个作业类,并通过创建多个 JobDetails 实例(每个实例都有自己的属性和 JobDataMap )并将它们全部添加到调度器中,从而在调度器中存储许多“实例定义”。

Jobs深入学习的更多相关文章

  1. 详细学习ORACLE JOBS

    一点一点学习jobs的各个方面比较长,比较烦,但是应该看完后会对jobs比较好的应用 一.学习准备 开始dbms_job学习前,先认识一个参数job_queue_processes a.job_que ...

  2. Linux学习--第十二天--服务、ps、top、pstree、kill、&、jobs、fg、vmstat、dmesg、free、uptime、uname、crontab、ls

    服务分类 linux服务分为rpm包默认安装的服务和源码包安装的服务. rpm包默认安装的服务分为独立的服务和基于xinetd服务. 查询已安装的服务 rpm包安装的服务 chkconfig --li ...

  3. 全面学习ORACLE Scheduler特性(5)Schedules调度Programs执行的Jobs

    3.2 Schedules调度Programs执行的Jobs 通过schedule调度program的执行的job,看到这样的形容是不是让你彻底晕头了,就说明你还是没搞明白10g中SCHEDULERS ...

  4. 全面学习ORACLE Scheduler特性(2)管理jobs

    1.2  管理Jobs 1.2.1  启用Jobs 前面创建JOB时,由于未显式的指定ENABLED参数,因此即使指定了START_DATE,不过默认情况下JOB不会自动执行.对于这种情况,DBMS_ ...

  5. 全面学习ORACLE Scheduler特性(1)创建jobs

    所谓出于job而胜于job,说的就是Oracle 10g后的新特性Scheduler啦.在10g环境中,ORACLE建议使用Scheduler替换普通的job,来管理任务的执行.其实,将Schedul ...

  6. Linux学习笔记(16)Linux前后台进程切换(fg/bg/jobs/ctrl+z)

    关键词:Linux前后台进程切换,linux进程切换 fg.bg.jobs.&.ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的一.& ...

  7. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  8. 【转载学习前辈的经验】-- Mistakes I made (as a developer) 我(作为一名开发者)所犯过的错误

    我 2006 年开始工作,至今已经 10 年.10 年是个里程碑,我开始回顾自己曾经犯过的错误,以及我希望从同行那里得到什么类型的忠告.一切都在快速改变,10 年了,我不能确定这些秘诀是否还有用. 不 ...

  9. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

随机推荐

  1. ES6新特性,对象的快速创建

    //es6对象快速赋值 //es5对象赋值 var name="xiaoming"; var age=18 var person={ name:name, age:age } co ...

  2. 深入理解之 Android Handler

    深入理解之 Android Handler   一,相关概念 在Android中如果通过用户界面(如button)来来启动线程,然后再线程中的执行代码将状态信息输出到用户界面(如文本框),这时候就会抛 ...

  3. 移动端H5拍照代码实现及外网部署

    最近的工作中,遇到了一个需求:对于无APP登陆权限的人员,提供拍照上传功能,以便生成更完善的出工记录.经研究讨论,决定实现的机制为:由合法的人员登陆APP认领相关工作任务,并生成当天当工作的唯一二维码 ...

  4. Java语法基础学习DayFifteen(IO续)

    一.缓冲流(处理流的一种) 1.作用:可以提高文件操作的效率 2.使用BufferedInputStream和BufferedOutputStream实现非文本文件的复制 特点:flush()方法 代 ...

  5. web.xml配置以及一些详解

    web.xml的根元素定义如下所示(代表当前使用哪个模版): <?xml version="1.0" encoding="UTF-8"?> < ...

  6. dos语法

    一)MD——建立子目录 1.功能:创建新的子目录 2.类型:内部命令 3.格式:MD[盘符:][路径名]〈子目录名〉 4.使用说明: (1)“盘符”:指定要建立子目录的磁盘驱动器字母,若省略,则为当前 ...

  7. springboot区分开发、测试、生产多环境的应用配置(二)

    转:https://www.jb51.net/article/139119.htm springboot区分开发.测试.生产多环境的应用配置(二) 这篇文章主要给大家介绍了关于maven profil ...

  8. 项目配置linux上, 配置文件访问不到

    /** * 读入TXT文件 */public List<String> readFile(String pathName) { List<String> list = new ...

  9. 配置mysql主从步骤

    在公司开发中,有时候为了缓解数据库压力,会把读写分开为两个数据库来操作,读为一个数据库,写为一个数据库,然后两个数据库做同步,这样能明显降低数据库的压力,下面给大家介绍如何进行mysql主从数据库配置 ...

  10. SLEUTH 城市扩张模型

    3.19号准备试着运行一下SLEUTH模型,但是好不容易没报错出了一个test的结果,我就再也没看过了,导致现在我竟然差不多忘记当时怎么搞出来的了... 这也提醒我了,,,以后解决一个什么东西一定要立 ...