quartz学习与应用(一、简单快速入门应用)

quartz学习与应用(一、简单快速入门应用)


quartz最新版本下载:http://www.quartz-scheduler.org/downloads/

1.数据库12表:

  • 表信息解析:

1.qrtz_blob_triggers : 以Blob 类型存储的触发器。
2.qrtz_calendars:存放日历信息, quartz可配置一个日历来指定一个时间范围。
3.qrtz_cron_triggers:存放cron类型的触发器。
4.qrtz_fired_triggers:存放已触发的触发器。
5.qrtz_job_details:存放一个jobDetail信息。
6.qrtz_job_listeners:job监听器
7.qrtz_locks: 存储程序的悲观锁的信息(假如使用了悲观锁)。
8.qrtz_paused_trigger_graps:存放暂停掉的触发器。
9.qrtz_scheduler_state:调度器状态。
10.qrtz_simple_triggers:简单触发器的信息。
11.qrtz_trigger_listeners:触发器监听器。
12.qrtz_triggers:触发器的基本信息。

2.引入依赖 pom.xml

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.1</version>
    </dependency>

3.配置文件:

  • quartz的配置文件: quartz.properties

     #实例名,集群各节点的实例名相同
     org.quartz.scheduler.instanceName = DefaultQuartzScheduler  
     #实例ID,设为AUTO则由Quartz自动根据主机名、时间戳生成实例ID
     org.quartz.scheduler.instanceId = AUTO   
     org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool   
     org.quartz.threadPool.threadCount = 10   
     org.quartz.threadPool.threadPriority = 5
     org.quartz.jobStore.misfireThreshold = 60000   
     #存储任务为数据库存储,若使用内存,则配置成 org.quartz.simpl.RAMJobStore
     org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX  
     org.quartz.jobStore.tablePrefix = QRTZ_  
     org.quartz.jobStore.isClustered = true
     org.quartz.jobStore.clusterCheckinInterval = 15000
    
  • 项目配置文件:application.yml (本例以springboot为例)

      server:
        port: ${port:8081}
      spring:
        datasource:
          url: jdbc:mysql://127.0.0.1:3306/quartz?useUnicode=true&characterEncoding=utf-8
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver
    

4.示例代码:

  • quartz的配置类:(依个人配置,不一定和这一样。其实就是quart初始化、调度器工厂和trigger注册等)

      package com.weijs.demo.quartz.config;
    
      import org.quartz.Trigger;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.core.io.ClassPathResource;
      import org.springframework.core.io.support.PropertiesLoaderUtils;
      import org.springframework.scheduling.quartz.SchedulerFactoryBean;
      
      import javax.sql.DataSource;
      import java.io.IOException;
      import java.util.Properties;
      
      /**
       * quart初始化和trigger注册
       */
      @Configuration
      public class QuartzConfig {
      
          @Autowired
          private DataSource dataSource ;
          @Autowired
         private QuartzJobConfig quartzJobConfig;
      
          @Bean
          public Properties quartzProperties(){
              Properties properties = null;
              try {
                  properties =  PropertiesLoaderUtils.loadProperties(new ClassPathResource("quartz.properties"));//加载配置文件
              }catch (IOException ex){
                  ex.printStackTrace();
              }
              return properties;
          }
      
      
          /**
           * 调度器 工厂
           *
           * 整个流程:
           * 调度器(配置好各种配置)中放入任务触发器-->任务触发器去调任务明细bane-->调任务明细bane无调用任务具体处理类
           *
           *
           * @return
           */
          @Bean
          public SchedulerFactoryBean quartzScheduler(){
              SchedulerFactoryBean quartzScheduler = new SchedulerFactoryBean();
              quartzScheduler.setDataSource(dataSource);
              quartzScheduler.setQuartzProperties(quartzProperties());//配置
              quartzScheduler.setOverwriteExistingJobs(true);//是否覆盖已存在的任务
      
              Trigger trigger [] ={quartzJobConfig.demoJobTrigger().getObject()};
              quartzScheduler.setTriggers(trigger);//放入任务触发器,任务触发器去调任务明细bane,调任务明细bane无调用任务具体处理类
              return quartzScheduler;
          }
      }
    
  • job的配置:(其实就是job的详情信息注册)

      package com.weijs.demo.quartz.config;
    
      import com.weijs.demo.quartz.DemoJob;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.context.annotation.Bean;
      import org.springframework.context.annotation.Configuration;
      import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
      import org.springframework.scheduling.quartz.JobDetailFactoryBean;
      
      /***
       * job注册
       */
      @Configuration
      public class QuartzJobConfig {
      
          @Value("${jobs.demo.cron}")
          private String demoCron;
      
          /**
           * 任务明细bean
           * @return
           */
          @Bean
          public JobDetailFactoryBean demoJobDetail(){
              JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
              jobDetailFactoryBean.setJobClass(DemoJob.class);//具体处理类
              jobDetailFactoryBean.setDescription("测试demo定时job");//任务描述
              jobDetailFactoryBean.setDurability(true);
              return  jobDetailFactoryBean;
          }
      
          /**
           * 任务触发器bean
           * @return
           */
          @Bean
          public CronTriggerFactoryBean demoJobTrigger(){
              CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean();
              cronTriggerFactoryBean.setJobDetail(demoJobDetail().getObject());//任务明细bean
              cronTriggerFactoryBean.setDescription("每10秒跑一次");//触发器描述
              cronTriggerFactoryBean.setCronExpression(demoCron);//cron表达式
              return  cronTriggerFactoryBean;
          }
      
      }
    
  • job的具体业务逻辑处理类:

      package com.weijs.demo.quartz;
      
      import org.quartz.JobExecutionContext;
      import org.quartz.JobExecutionException;
      import org.springframework.scheduling.quartz.QuartzJobBean;
      import org.springframework.stereotype.Component;
      
      @Component
      public class DemoJob extends QuartzJobBean {
      
          @Override
          protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
              System.out.println("=====quartz跑起来了!!!===========这是任务业务处理类");
          }
      }
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值