引入依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
。。。
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
<!-- 添加 Scheduled 坐标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<!-- Sprng tx 坐标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
Job1.java
@PropertySource(value = "classpath:/config/quartz_job.properties")
@ConfigurationProperties(prefix = "quartz.job1")
@Component
public class Job1 extends ScheduledJob {
private String cron;
/**
* 五秒钟跑一次
*
* @return
*/
@Override
public String getCron() {
return cron;
}
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("job1 is running ************************");
}
public void setCron(String cron) {
this.cron = cron;
}
}
ScheduledJob.java
public abstract class ScheduledJob implements Job {
@PostConstruct
public void init() {
TaskManager.JOB_LIST.add(this);
}
/**
* cron表达式在线生成 http://cron.qqe2.com/
*
* @return
*/
public abstract String getCron();
/**
* @param scheduler 0/5 * * * * ?
* @throws SchedulerException
*/
public void startJob(Scheduler scheduler) throws SchedulerException {
JobDetail jobDetail = JobBuilder.newJob(this.getClass())
.withIdentity(this.getClass().getName() + "-job", "group1").build();
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(getCron());
CronTrigger cronTrigger = getCronTrigger(scheduleBuilder);
scheduler.scheduleJob(jobDetail, cronTrigger);
}
/**
* 若要自定义触发器,请在子类重写此方法
*
* @return
*/
protected CronTrigger getCronTrigger(CronScheduleBuilder scheduleBuilder) {
return TriggerBuilder.newTrigger().withIdentity(this.getClass().getName() + "-trigger", "group1")
.withSchedule(scheduleBuilder).build();
}
}
SchedulerListener.java
@Configuration
public class SchedulerListener implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
public TaskManager taskManager;
@Override
public void onApplicationEvent(ContextRefreshedEvent event) {
try {
taskManager.executeTasks();
} catch (Exception e) {
e.printStackTrace();
}
}
@Bean
public SchedulerFactoryBean schedulerFactoryBean() {
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
return schedulerFactoryBean;
}
}
TaskManager.java
/**
* 定时任务管理者
*/
@Component
public class TaskManager {
/**
* 存放所有定时任务
*/
public static final List<ScheduledJob> JOB_LIST = new ArrayList<>();
@Autowired
SchedulerFactoryBean schedulerFactoryBean;
/**
* 执行所有定时任务
*/
public void executeTasks() {
if (!CollectionUtils.isEmpty(JOB_LIST)) {
for (ScheduledJob job : JOB_LIST) {
if (StringUtils.isEmpty(job.getCron())) {
System.out.println("无效定时任务:"+job.getClass());
continue;
}
try {
//跑起来
job.startJob(schedulerFactoryBean.getScheduler());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
quartz_job.properties
quartz.job1.cron=0/5 * * * * ?
运行效果: