美文网首页
Quartz简单使用

Quartz简单使用

作者: xiaoming_he | 来源:发表于2019-08-09 18:11 被阅读0次

    基础概念

    • Scheduler - 与调度器交互的主要API。
    • Job - 需要被调度器调度的任务必须实现的接口。
    • JobDetail - 用于定义任务的实例。
    • Trigger - 用于定义调度器何时调度任务执行的组件。
    • JobBuilder - 用于定义或创建JobDetail的实例 。
    • TriggerBuilder - 用于定义或创建触发器实例。

    原生使用

    1. 新建job

    job需要实现Job接口,重写execute方法

    public class TestTaskJob implements Job {
        private static final Logger logger = LoggerFactory.getLogger(TestTaskJob.class);
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            String localDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            logger.info("TestTaskJob-->" + localDateTime);
        }
    }
    

    2. 配置文件

    如果不配置配置文件,则使用默认配置文件 quartz.properties,位于/org/quartz-scheduler/quartz/2.3.1/quartz-2.3.1.jar!/org/quartz/quartz.properties

    3. 启动quartz

    public class QuartzSimpleDemo {
    
        public static void main(String[] args) throws SchedulerException {
            //1. 创建Scheduler
            SchedulerFactory sfact = new StdSchedulerFactory();
            Scheduler sched  = sfact.getScheduler();
    
            //2. 创建job信息
            JobDetail testTaskJob = JobBuilder.newJob(TestTaskJob.class).storeDurably()
                    .withIdentity("TestTaskJob").build();
            //3. 创建触发器
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("*/5 * * * * ?");
            CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                    .forJob(testTaskJob)
                    .withIdentity("testTaskJob")
                    .withSchedule(cronScheduleBuilder)
                    .build();
            //4. 启动
            sched.scheduleJob(testTaskJob, cronTrigger);
            sched.start();
        }
    }
    

    spring boot quartz使用

    1. pom.xml配置

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-quartz</artifactId>
    </dependency>
    

    2. 创建job

    job需要实现QuartzJobBean接口,并实现executeInternal方法

    public class TestTaskJob1 extends QuartzJobBean {
        private static final Logger logger = LoggerFactory.getLogger(TestTaskJob1.class);
    
        @Override
        protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            String localDateTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            logger.info("TestTaskJob1-->" + localDateTime);
        }
    }
    

    3. 声明bean配置

    声明jobDetail和trigger bean

    @Configuration
    public class QuartzConfig {
      @Bean
        public JobDetail testQuartz1() {
            return JobBuilder.newJob(TestTaskJob1.class).storeDurably().withIdentity("TestTaskJob1").build();
        }
    
        @Bean
        public Trigger testQuartzTrigger2() {
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("*/5 * * * * ?");
            return TriggerBuilder.newTrigger()
                    .forJob(testQuartz1())
                    .withIdentity("testTaskJob1")
                    .withSchedule(cronScheduleBuilder)
                    .build();
        }
    }
    

    4. 启动quart

    @SpringBootApplication
    public class SpringBootQuartz {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringBootQuartz.class, args);
        }
    }
    

    总结

    对比原生的quart和Spring boot quartz,spring boot quart简化了很多,不需要我们声明Scheduler,我们只要关注job和trigger的创建。

    相关文章

      网友评论

          本文标题:Quartz简单使用

          本文链接:https://www.haomeiwen.com/subject/bqfkjctx.html