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("--------------------------定时任务开始--------------------------------");
}
}
网友评论