1. 使用SpringBoot默认的定时任务
1.1. 新建SpringBoot项目
1.2. 选择版本与依赖
1.3. 在Applicaiton上添加开启定时任务的注解
package com.example._18quartz;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
// 开启定时任务
@EnableScheduling
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
1.4. 编写一个定时任务的类
package com.example._18quartz.task;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class ScheduleTask {
private int count = 0;
private int count2 = 0;
// cron 表达式 (每隔15秒执行一次)
@Scheduled(cron = "0/15 * * * * ?")
public void task1()
{
count++;
System.out.println("定时任务1,运行第"+count+"次");
}
// (每隔6秒执行一次)
@Scheduled(fixedRate = 6000)
public void task2()
{
count2++;
System.out.println("定时任务2,运行第"+count2+"次");
}
}
1.5. 运行测试
2. 使用Quartz
2.1. 注释掉1中的代码
2.2. 新建一个定时任务
SampleJob.java
package com.example._18quartz.quartz;
import lombok.Data;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
@Data
public class SampleJob extends QuartzJobBean {
protected String name;
@Override
protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
System.out.println(name+"定时执行代码");
}
}
2.3. 新建一个定时任务配置类
package com.example._18quartz.quartz;
import org.quartz.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
// @Configuration 配置类
// 里面的方法都是会被自动执行,并且会返回对象 放入到Spring容器中
@Configuration
public class SampleScheduler
{
// 定时任务详情对象
@Bean
public JobDetail jobDetail()
{
return JobBuilder.newJob(SampleJob.class)
.withIdentity("job1", "group1")
.usingJobData("name","张三")
.storeDurably()
.build();
}
// 触发器
@Bean
public Trigger trigger()
{
// 调度器
SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
.withIntervalInSeconds(5).repeatForever();
return TriggerBuilder.newTrigger().forJob(jobDetail())
.withIdentity("sampleTrigger").withSchedule(scheduleBuilder).build();
}
}