一、Quartz實現定時任務
1、引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2、application.yml 增加配置
org:
quartz:
trigger_key_name: job_trigger
job_group: job_group
cron_time: 0/5 * * * * ?
3、新建配置類
@Configuration
public class QuartzConfig {
@Value("${org.quartz.trigger_key_name}")
private String TRIGGER_KEY_NAME;
@Value("${org.quartz.job_group}")
private String JOB_GROUP;
@Value("${org.quartz.cron_time}")
private String CRON_TIME;
@Autowired
Scheduler scheduler;
public void startJob() throws SchedulerException{
//首先是通過 JobBuilder 創建JobDetail實例,QuartzJob 必須是實現了 Job 接口的實例
JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).withIdentity(TRIGGER_KEY_NAME,JOB_GROUP).build();
//構建觸發器
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(CRON_TIME);
CronTrigger cronTrigger = TriggerBuilder.newTrigger()
.withIdentity(TRIGGER_KEY_NAME, JOB_GROUP)
.withSchedule(cronScheduleBuilder).build();
//將任務和觸發器綁定到調度器
scheduler.scheduleJob(jobDetail,cronTrigger);
scheduler.start();
}
}
4、新增Job任務類,必須實現 quartz 的Job接口
public class QuartzJob implements Job {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
logger.info("==== 定時任務 =====");
}
}
5、控制器調用測試一下效果
@RequestMapping("/index")
public String index(){
try {
quartzConfig.startJob();
} catch (SchedulerException e) {
e.printStackTrace();
}
return "index:content";
}
二、SpringTask實現定時任務
1、不需要引入依賴,直接在項目啓動類增加註解
//啓用自帶定時任務
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
2、定時任務(注:定時任務的類不能是抽象類,如果非要則需要有子類繼承)
@Component
public class OrderTimeOutCancelTask {
/**
* 每10分鐘掃描一次,掃描設定超時時間之前下的訂單,如果沒支付則取消該訂單
*/
@Scheduled(cron = "0 0/10 * ? * ?")
private void cancelTimeOutOrder() {
}
}