美文网首页
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