zoukankan      html  css  js  c++  java
  • Quartz调度

    quartz配置类

    package com.examplequartz.demoquartz.service;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
    import org.springframework.scheduling.quartz.JobDetailFactoryBean;
    import org.springframework.scheduling.quartz.SchedulerFactoryBean;
    import org.springframework.scheduling.quartz.SimpleTriggerFactoryBean;
    
    @Configuration
    public class QuartzConfig {
        @Autowired
        private MyAdaptableJobFactory myAdaptableJobFactory;
        /**
         * 1.创建job对象  做什么
         */
        @Bean
        public JobDetailFactoryBean jobDetailFactoryBean() {
            JobDetailFactoryBean factory = new JobDetailFactoryBean();
            //关联自己的job类
            factory.setJobClass(DemoJob.class);
            return factory;
        }
    
        /**
         * 2.创建Trigger对象  什么时候做
         * <p>
         * 简单Trigger
         */
        @Bean
        public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean) {
            SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();
            //关联JobDetail对象
            factory.setJobDetail(jobDetailFactoryBean.getObject());
            //设置触发时间 该参数表示毫秒,2000表示2秒
            factory.setRepeatInterval(5);
            //设置重复次数
            factory.setRepeatCount(1000);
            return factory;
        }
    
        /**
         *  Cron Trigger
         */
        @Bean
        public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
            CronTriggerFactoryBean factory = new CronTriggerFactoryBean();
            //关联JobDetail
            factory.setJobDetail(jobDetailFactoryBean.getObject());
            //                             秒   分钟 小时 天 月 星期
            factory.setCronExpression("10,15,20 34 11 * * ?");
            //表示每年每月每天的11点34分的10,15,20秒都会执行一次
            return factory;
        }
    
        /**
         * 3.创建Scheduler对象
         */
        @Bean
        public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean) {
            SchedulerFactoryBean factoryBean = new SchedulerFactoryBean();
            //关联trigger
            factoryBean.setTriggers(simpleTriggerFactoryBean.getObject());
            factoryBean.setJobFactory(myAdaptableJobFactory);
            return factoryBean;
        }
    }
    
    

    如果自己写的一个类作为job类执行需要继承AdaptableJobFactory 重写createJobInstance方法,否则spring容器无法加载我们的job

    package com.examplequartz.demoquartz.service;
    
    import org.quartz.spi.TriggerFiredBundle;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
    import org.springframework.scheduling.quartz.AdaptableJobFactory;
    import org.springframework.stereotype.Service;
    
    @Service
    public class MyAdaptableJobFactory extends AdaptableJobFactory {
    
        //AutowireCapableBeanFactory 可以将一个对象添加到Spring的IOC容器中,并且完成该对象的注入
        @Autowired
        private AutowireCapableBeanFactory autowiredCaptableBeanFactory;
    
        @Override
        protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
            Object jobInstance = super.createJobInstance(bundle);
            autowiredCaptableBeanFactory.autowireBean(jobInstance);
            return jobInstance;
        }
    }
    
    

    job的执行

    package com.examplequartz.demoquartz.service;
    
    import com.alibaba.fastjson.JSON;
    import org.quartz.*;
    import org.springframework.beans.factory.annotation.Autowired;
    
    @DisallowConcurrentExecution
    @PersistJobDataAfterExecution
    public class DemoJob implements Job {
    	//UserJob 是我们具体需要实现的job任务,这里加载进来
        @Autowired
        private UserJob userJob;
    
        @Override
        public void execute(JobExecutionContext context) throws JobExecutionException {
            System.out.println(JSON.toJSONString(context.getJobDetail()));
            userJob.userJob();
        }
    }
    
    

    自定义job类

    package com.examplequartz.demoquartz.service;
    
    import org.springframework.stereotype.Service;
    
    @Service
    public class UserJob {
        public void userJob(){
            System.out.println("Start:"+Thread.currentThread().getName());
            for(int i=0;i<10;i++){
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }//{ System.out.println(Thread.currentThread().getName());}
            System.out.println("End:"+Thread.currentThread().getName());
        }
    }
    
    
  • 相关阅读:
    RTX这种东西究竟有什么价值?
    为什么必须要有需求文档这种东西?
    如何理解环境光?
    文字校对应该怎么校对?
    绑定解绑钝化活化监听器
    ServletRequestLister
    HttpSessionListener
    ServletContextListener知识点
    案例8-站内搜索功能
    案例7-用户名异步校验
  • 原文地址:https://www.cnblogs.com/InternetJava/p/14350243.html
Copyright © 2011-2022 走看看