Quartz方式
- 编写配置类
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位
- 在启动类中加入@EnableScheduling注解
@SpringBootApplication
@EnableScheduling //开启定时功能的注解
public class ScheduleApplication {
public static void main(String[] args) {
SpringApplication.run(ScheduleApplication.class, args);
}
}
- 在需要定时执行的方法上加入注解@Schedule即可,例如:
@Scheduled(cron = "0 0 0 * * ?")
public void testSchedule(){
System.out.println("到时间了,执行!");
}
执行结果
希望对您有帮助!
版权声明:本文为qq_41727840原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。