美文网首页
spring-boot中使用定时任务

spring-boot中使用定时任务

作者: MaJiT | 来源:发表于2020-08-06 11:59 被阅读0次

    1.spring-boot自带的定时任务

    1.1开启定时任务@EnableScheduling

    1.2自定义定时任务

        /**
         * 秒,分,时,日,月,周几 (0 * * * * MON-FRI)周一至周五每一分执行
         */
        @Scheduled(cron = "0 * * * * MON-FRI")
        public void test(){
            System.out.println("测试定时任务");
        }
    

    2.Quartz

    2.1添加依赖

    <!-- 定时任务 quartz-->
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz</artifactId>
                <version>2.3.2</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- scheduled -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
            </dependency>
    

    2.2编写Quartz的配置类

    @Configuration
    @EnableScheduling
    public class QuartzConfig {
    
    
        //1.创建JOB对象
        @Bean
        public JobDetailFactoryBean jobDetailFactoryBean(){
            JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();
            //关联我们自己的JOB类
            factoryBean.setJobClass(QuartzDemo.class);
    
            return factoryBean;
        }
        //2.创建Trigger对象
        @Bean
        public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
            SimpleTriggerFactoryBean simpleTriggerFactoryBean = new SimpleTriggerFactoryBean();
            //关联JobDetail对象
            simpleTriggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject());
            //设置执行的毫秒数
            simpleTriggerFactoryBean.setRepeatInterval(2000);
            //重复次数
            simpleTriggerFactoryBean.setRepeatCount(1);
            return simpleTriggerFactoryBean;
        }
        //3.创建Scheduler对象
        @Bean
        public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean, MyAdaptableJobFactory myAdaptableJobFactory){
            SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
            //关联Trigger
            schedulerFactoryBean.setTriggers(simpleTriggerFactoryBean.getObject());
            schedulerFactoryBean.setJobFactory(myAdaptableJobFactory);
            return schedulerFactoryBean;
        }
    }
    

    2.3编写一个自定义的AdaptableJobFactory

    @Component("myAdaptableJobFactory")
    public class MyAdaptableJobFactory extends AdaptableJobFactory {
        @Autowired
        private AutowireCapableBeanFactory autowireCapableBeanFactory;
    
        //该方法需要将实例化的任务对象手动添加到SpringIOC容器中并且完成对象注入
        protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception{
            Object object = super.createJobInstance(bundle);
            //将object对象添加SpringIOC容器中并且完成对象注入
            this.autowireCapableBeanFactory.autowireBean(object);
            return object;
        }
    }
    

    2.4使用定时任务

    public class QuartzDemo implements Job {
        @Override
        public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
            System.out.println("--------------------------定时任务开始--------------------------------");
        }
    }
    

    相关文章

      网友评论

          本文标题:spring-boot中使用定时任务

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