一、@Scheduled註解方式實現
- 首先有一個springboot項目,然後添加依賴
<!-- 添加scheduled座標 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
- 在含有定時方法的類前添加如下註解
@Configuration
@EnableScheduling
public class TimingTask {
@Scheduled(fixedRate = 5000)//單位是ms
private void configureTasks() {
System.err.println("執行靜態定時任務時間: " + new Date());
}
@Scheduled(cron = "0/5 * * * * ?")//表達式見下面
private void configureTasks2() {
System.out.println("執行靜態定時任務時間: " + new Date());
}
}
- cron表達式解釋
參考文章:https://blog.csdn.net/weixin_43564627/article/details/93857252 - 啓動
- 控制檯輸出
二、quartz定時器實現
1.普通實現方式 - job–任務----你要做什麼事
- trigger–觸發器–你什麼時候去做
- scheduler–任務調度—你什麼時候需要去做什麼事
依賴
<!-- quartz座標 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency
(1),定義任務類
定義任務類,實現job接口
/*
* 定義任務類
*
*
* */
public class QuartzDemo implements Job {
//任務類觸發時執行的方法
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Exeute............."+new Date());
}
(2),創建執行
注意第二步有兩種執行方法,第一種適合定義簡單的定時器,第二種適合較爲複雜的定時器
public class QuartzMain {
public static void main(String[] args) throws SchedulerException {
// 1.創建Job對象,你要做什麼事
JobDetail job = JobBuilder.newJob(QuartzDemo.class).build();
// 2.創建trigger對象,在什麼時間做
/*
* 簡單的trigger出發時間,通過quartz提供一個方法來完成簡單的重複調用cron trigger按照cron的表達式來給定觸發時間
*/
/*
* Trigger trigger =
* TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.
* repeatSecondlyForever()) .build();
*/
Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
.build();
// 創建scheduler對象,在什麼時間做什麼事?
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(job, trigger);
// 啓動
scheduler.start();
}
}
相關的解釋:
SimpleScheduleBuilder相關接口的解釋:
repeatSecondlyForever():每秒執行一次,一直執行下去
repeatSecondlyForever(5):每5秒執行一次,一直執行下去
RepeatSecondlyForTotalCount (5,9):每9秒執行一次,一共執行5次
(3),執行main方法,即可運行
Exeute.............Sun Mar 29 18:46:04 CST 2020
Exeute.............Sun Mar 29 18:46:06 CST 2020
Exeute.............Sun Mar 29 18:46:08 CST 2020
Exeute.............Sun Mar 29 18:46:10 CST 2020
Exeute.............Sun Mar 29 18:46:12 CST 2020
2,springboot整合quartz
(1),創建一個springboot-maven項目
(2),添加依賴
<!-- quartz座標 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
(3),編寫任務類
/*
* 任務類
*
* */
public class quartz implements Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("執行任務==========="+new Date());
}
(4),編寫配置類
/*
* quartz的配置類:
*
* */
@Configuration
@EnableScheduling
public class quartzConfig {
/*
* 1. 創建Job對象
* */
@Bean
public JobDetailFactoryBean jobDetailFactoryBean() {
JobDetailFactoryBean factory = new JobDetailFactoryBean();
//關聯我們自己的任務類
factory.setJobClass(quartz.class);
return factory;
}
/*
* 2.創建trigger對象
* 簡單的trigger
* */
@Bean
public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean) {
SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();
//關聯JobDetail對象
factory.setJobDetail(jobDetailFactoryBean.getObject());
//設置觸發時間,該參數表示執行的一個毫秒數
factory.setRepeatInterval(2000);
//設置重複次數
factory.setRepeatCount(10);
return factory;
}
/*
* 3.創建scheduler對象
* */
@Bean
public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
//關聯trigger
factory.setTriggers(simpleTriggerFactoryBean.getObject());
return factory;
}
(5),右擊啓動
執行任務===========Mon Mar 30 15:07:19 CST 2020
執行任務===========Mon Mar 30 15:07:21 CST 2020
執行任務===========Mon Mar 30 15:07:23 CST 2020
執行任務===========Mon Mar 30 15:07:25 CST 2020
執行任務===========Mon Mar 30 15:07:27 CST 2020
執行任務===========Mon Mar 30 15:07:29 CST 2020
執行任務===========Mon Mar 30 15:07:31 CST 2020
相關的demo見本人上傳的資源