Quartz和@Scheduled注解方式实现定时任务

Quartz方式

  1. 编写配置类
package com.pro.o2o.config;

import com.pro.o2o.service.ProductSellDailyService;
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.MethodInvokingJobDetailFactoryBean;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

/**
 * @Author Roy Yang
 * @Date 2020/3/26 19:07
 * @Version 1.0
 */
@Configuration
public class QuartzConfiguration {

    @Autowired
    private ProductSellDailyService productSellDailyService;

    @Autowired
    private MethodInvokingJobDetailFactoryBean jobDetailFactory;

    @Autowired
    private CronTriggerFactoryBean triggerFactoryBean;


    /**
     * 创建jobDetailFactory并返回
     * @return
     */
    @Bean(name = "jobDetailFactory")
    public MethodInvokingJobDetailFactoryBean createJobDetail(){

        MethodInvokingJobDetailFactoryBean jobDetailFactoryBean = new MethodInvokingJobDetailFactoryBean();

        jobDetailFactoryBean.setName("product_sell_daily_job");

        jobDetailFactoryBean.setGroup("job_product_sell_daily_group");

        jobDetailFactoryBean.setConcurrent(false);

        //指定运行任务的类
        jobDetailFactoryBean.setTargetObject(productSellDailyService);

        //指定运行任务的方法
        jobDetailFactoryBean.setTargetMethod("sellDailyCount");

        return jobDetailFactoryBean;
    }


    @Bean("triggerFactoryBean")
    public CronTriggerFactoryBean createProductSellDailyTrigger(){
        CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();

        //设置名字
        triggerFactoryBean.setName("product_sell_daily_trigger");

        //设置组名
        triggerFactoryBean.setGroup("job_product_sell_daily_group");

        //绑定jobDetail
        triggerFactoryBean.setJobDetail(jobDetailFactory.getObject());

        //设定cron表达式(每日0点执行一次)
        triggerFactoryBean.setCronExpression("0 0 0 * * ? *");

        return triggerFactoryBean;

    }


    @Bean("schedulerFactory")
    public SchedulerFactoryBean createSchedulerFactory(){
        SchedulerFactoryBean schedulerFactory = new SchedulerFactoryBean();
        schedulerFactory.setTriggers(triggerFactoryBean.getObject());
        return schedulerFactory;
    }
}

根据cron表达式的内容,会在规定时间调用指定类中的指定方法

		//指定运行任务的类
        jobDetailFactoryBean.setTargetObject(productSellDailyService);

        //指定运行任务的方法
        jobDetailFactoryBean.setTargetMethod("sellDailyCount");

@Schedule

方式较简单,但是该注解里所填写cron表达式不能包括年份,不能超过6位

  1. 在启动类中加入@EnableScheduling注解
@SpringBootApplication
@EnableScheduling       //开启定时功能的注解
public class ScheduleApplication {

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

}

  1. 在需要定时执行的方法上加入注解@Schedule即可,例如:
@Scheduled(cron = "0 0 0 * * ?")
    public void testSchedule(){
        System.out.println("到时间了,执行!");
    }

执行结果
在这里插入图片描述
希望对您有帮助!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值