1. 实现一个简单的定时任务

设定一个简单任务(job)
让Quartz 定时运行这个任务

1. 创建配置文件

创建自己的quartz.properties文件 放到应用的classpath下

  1. # 调度器的名称为 MyScheduler
  2. org.quartz.scheduler.instanceName = MyScheduler
  3. # 线程池中有3个线程,这意味着最多可以同时运行3job
  4. org.quartz.threadPool.threadCount = 3
  5. # RamJobStore: 所有数据,包括jobtrigger的配置,都会存储在内存中(而不是数据库里)
  6. # 使用quartz的数据库存储功能(校对注:设置成另外一个类)
  7. org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

2. 创建一个简单job

  1. public class HelloJob implements Job {
  2. @Override
  3. public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
  4. System.out.println("Hello World");
  5. }
  6. }


3. 获取调度器并注册job

  1. /**
  2. * 关于 Quartz 的一个快速应用
  3. */
  4. public class QuickStart {
  5. public static void main(String[] args) {
  6. try {
  7. //获取调度器
  8. Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
  9. //启动
  10. scheduler.start();
  11. //创建一个简单任务
  12. JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
  13. .withIdentity("job1", "group1")
  14. .build();
  15. //创建触发器
  16. Trigger trigger= TriggerBuilder.newTrigger()
  17. .withIdentity("trigger1","trigger1")
  18. .startNow()
  19. .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
  20. .build();
  21. //注册该任务到调度器中
  22. scheduler.scheduleJob(jobDetail, trigger);
  23. Thread.sleep(30000);
  24. //关闭
  25. scheduler.shutdown();
  26. } catch (SchedulerException | InterruptedException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }

2. 触发任务时,携带数据

2.1 插入数据

job 和 Trigger 都能携带数据
可以在bulid的时候插入数据 也可以根据实例获取到 JobDataMap 插入数据

  1. //创建一个简单任务
  2. JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
  3. .withIdentity("job1", "group1")
  4. .usingJobData("j1","jv1")
  5. .build();
  6. jobDetail.getJobDataMap().put("j2","jv2");
  7. //创建触发器
  8. Trigger trigger= TriggerBuilder.newTrigger()
  9. .withIdentity("trigger1","trigger1")
  10. .usingJobData("t1","tv1")
  11. .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).repeatForever())
  12. .build();
  13. trigger.getJobDataMap().put("t2","tv2");

2.2 获取数据

在 job 中重写的 execute 方法中的 context 中获取

  1. @Slf4j
  2. public class HelloJob implements Job {
  3. @Override
  4. public void execute(JobExecutionContext context) throws JobExecutionException {
  5. log.info("j1:{}", context.getJobDetail().getJobDataMap().get("j1") );
  6. log.info("j2:{}", context.getJobDetail().getJobDataMap().get("j2") );
  7. log.info("t1:{}", context.getTrigger().getJobDataMap().get("t1") );
  8. log.info("t2:{}", context.getTrigger().getJobDataMap().get("t2") );
  9. System.out.println("Hello World");
  10. }
  11. }