第一种使用Java自带的定时任务:
public class TestTimer {
public static void main(String[] args) {
TimerTask timerTask = new TimerTask()
{ @Override
public void run() {
System.out.println("task run:"+ new Date()); } };
Timer timer = new Timer();
//开始执行
timer.schedule(timerTask,10,3000);
}
}
第二种使用springboot自己的定时任务:
第一步在 SpringApplication主类上加
@EnableScheduling注解
第二步:自定义,一个类 并写一个方法,在你想要定时的方法上使用
@Scheduled(fixedDelay = 1000*60*120)注解即可
注意:自定义的方法需要使用@Component注解将其交予容器管理,否则定时任务不生效
第三种使用quartz框架与springboot集成:
quartz是一个简单易用但功能强大的任务调度框架 ,在springboot中使用它首先需要在maven中导入quartz包
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-quartz -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
第一步使用javaconfig去配置bean
因为springboot主类本身就是一个javaconfig所以我就在主类上配置bean
quartz关键点有job(实际执行的类),jobDetail(用于对执行对象的描述配置),trigger(如何去执行job),schedua(真正去执行job)r这四大组件:
创建一个job类并写一个需要执行定时任务的方法(简单省略了)
配置jobDetail bean:
/**
*
* 如果job只是普通类使用该bean
*
* @return the method invoking job detail factory bean
*/
@Bean
public MethodInvokingJobDetailFactoryBean detailFactoryBean(){
MethodInvokingJobDetailFactoryBean detailFactoryBean =new MethodInvokingJobDetailFactoryBean();
//定时任务类
detailFactoryBean.setTargetObject(new SystemInfolJob());
//定时任务执行方法
detailFactoryBean.setTargetMethod("getInfo");
//不让其并非执行
detailFactoryBean.setConcurrent(false);
return detailFactoryBean;
}
/**
* 如果Job实现了job接口使用该bean
*
* @return the job detail factory bean
*/
@Bean
public JobDetailFactoryBean jobDetailFactoryBean (){
JobDetailFactoryBean jobDetailFactoryBean =new JobDetailFactoryBean();
jobDetailFactoryBean.setJobClass(SimpleJob.class);
return jobDetailFactoryBean;
}
配置Trigger bean(springboot提供多种trigger):
@Bean
public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
SimpleTriggerFactoryBean simpleTriggerFactoryBean =new SimpleTriggerFactoryBean();
simpleTriggerFactoryBean.setJobDetail(jobDetailFactoryBean.getObject());
simpleTriggerFactoryBean.setStartDelay(0);
simpleTriggerFactoryBean.setRepeatInterval(2000);
return simpleTriggerFactoryBean;
}
@Bean
public CronTriggerFactoryBean cronTriggerFactoryBean(MethodInvokingJobDetailFactoryBean detailFactoryBean){
CronTriggerFactoryBean cronTriggerFactoryBean =new CronTriggerFactoryBean();
cronTriggerFactoryBean.setJobDetail(detailFactoryBean.getObject());
cronTriggerFactoryBean.setCronExpression("0/1 * * * * ? ");
return cronTriggerFactoryBean;
}
配置Scheduler
@Bean
public SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean,SimpleTriggerFactoryBean simpleTriggerFactoryBean){
SchedulerFactoryBean factoryBean =new SchedulerFactoryBean();
factoryBean.setTriggers(cronTriggerFactoryBean.getObject());
return factoryBean;
}