Scheduled
依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
使用
入口类添加
// 开启定时任务
@EnableScheduling
@Component
public class MySchedule {
// 当前任务执行结束1秒后开启另一个任务
@Scheduled(fixedDelay = 1000)
public void fixedDelay(){
System.out.println("fixedDelay:" + new Date());
}
// 当前任务开始执行2秒后开启另一个定时任务
@Scheduled(fixedRate = 2000)
public void fixedRate(){
System.out.println("fixedRate:" + new Date());
}
// 首次执行的延迟时间
@Scheduled(initialDelay = 1000, fixedRate = 2000 )
public void initialDelay(){
System.out.println("initialDelay:" + new Date());
}
// 每分钟执行一次
@Scheduled(cron = "0 * * * * ?")
public void cron(){
System.out.println("cron:" + new Date());
}
}
Quartz
依赖
<!-- Quartz -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
使用
@Component
public class MyFirstJob {
public void sayHello(){
System.out.println("MyFirstJob:sayHello:" + new Date());
}
}
public class MySecondJob extends QuartzJobBean {
private String name;
public void setName(String name){
this.name = name;
}
@Override
// 该方法被任务调用时使用
protected void executeInternal(JobExecutionContext context){
System.out.println("hello:"+name+":"+new Date());
}
}
配置定时任务
@Configuration
public class QuartzConfig {
@Bean
// 这种方式无法传参
MethodInvokingJobDetailFactoryBean jobDetail(){
MethodInvokingJobDetailFactoryBean bean = new MethodInvokingJobDetailFactoryBean();
// 只需要指定Job的实例名和要调用的方法即可
bean.setTargetBeanName("myFirstJob");
bean.setTargetMethod("sayHello");
return bean;
}
@Bean
JobDetailFactoryBean jobDetail2(){
JobDetailFactoryBean bean = new JobDetailFactoryBean();
// 只需指定JobClass即可
bean.setJobClass(MySecondJob.class);
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("name", "sang");
bean.setJobDataMap(jobDataMap);
bean.setDurability(true);
return bean;
}
@Bean
SimpleTriggerFactoryBean simpleTrigger(){
SimpleTriggerFactoryBean bean = new SimpleTriggerFactoryBean();
bean.setJobDetail(jobDetail().getObject());
// 任务循环次数
bean.setRepeatCount(3);
// 任务启动延迟时间
bean.setStartDelay(1000);
// 任务的时间间隔
bean.setRepeatInterval(2000);
return bean;
}
@Bean
CronTriggerFactoryBean cronTrigger(){
CronTriggerFactoryBean bean = new CronTriggerFactoryBean();
bean.setJobDetail(jobDetail2().getObject());
// 每秒执行一次
bean.setCronExpression("* * * * * ?");
return bean;
}
@Bean
SchedulerFactoryBean schedulerFactory(){
SchedulerFactoryBean bean = new SchedulerFactoryBean();
SimpleTrigger simpleTrigger = simpleTrigger().getObject();
CronTrigger cronTrigger = cronTrigger().getObject();
bean.setTriggers(simpleTrigger, cronTrigger);
return bean;
}
}