目录
1.定义cron的内容
我选择在配置文件中定义cron表达式的内容,也可以定义在数据库中,使用的时候从数据库中获取
server:
port: 8888
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/sys?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: lab945508@
redis:
port: 6379
host: 127.0.0.1
rabbitmq:
host: 127.0.0.1
port: 5672
mybatis-plus:
mapper-locations: classpath:settle/mapper/*Mapper.xml
type-aliases-package: com.example.demo.domain
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
corn: 0/5 * * * * ?
2.定时任务
package com.example.demo.quartz;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.SchedulingTaskExecutor;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
/**
* @author linaibo
* @version 1.0
* Create by 2022/12/3 14:22
*/
@Component
public class Task implements SchedulingConfigurer {
@Value("${corn}")
private String corn;
//corn可以设置在配置文件中,也可以设置在数据库的表中。可以追加画面,控制定时任务的执行,比如说添加一个flag,为1是执行,其他的场合,直接return不执行定时任务
// @Scheduled(cron = "0/1 * * * * ?")
// public void print() {
// taskRe
// }
public void taskPrint() {
System.out.println("开始执行");
}
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addTriggerTask(this::taskPrint,triggerContext -> {
//如果存在数据库中,这边可以调用数据库的表获取数据
CronTrigger trigger = new CronTrigger(corn);
return trigger.nextExecutionTime(triggerContext);
});
}
}
需要实现SchedulingConfigurer接口,重写接口中的configureTasks,添加执行器,设置要执行的方法,以及执行时间