第一種使用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;
}