在实际的项目中常常会遇到定时任务需求,Java中实现定时任务的主要方式有四种,定时任务老大哥应该是Quartz,应为他提供了分布式集群的功能。今天我就定时任务入门写个简单的案例,主要通过Spring 实现ScheduleConfigurer接口来实现。
整个过程主要分为两步:
第一步: 创建一个定时任务,主要通过实现ScheduleConfigurer
通过多线程的方式来创建任务,如果需要创建多个任务就可以通过多线程来实现
package com.ieng.job;
import com.ieng.entity.User;
import com.ieng.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
@Component("ScheduledDemo")
public class ScheduledDemo implements SchedulingConfigurer {
@Autowired
UserService userService;
//默认的任务周期为 10秒
private String cron1 = "0/5 * * * * ?";
private String cron2 = "0/8 * * * * ?";
private String cron3 = "0/7 * * * * ?";
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
// TODO Auto-generated method stub
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(new Date(System.currentTimeMillis())+"执行任务1开始------------");
List<User> userList= userService.querry();
for(User user: userList){
System.out.println(user.toString());
}
System.out.println("执行任务1结束------------");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
return new CronTrigger(cron1).nextExecutionTime(triggerContext);
}
});
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(new Date(System.currentTimeMillis())+"执行任务2开始------------");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
return new CronTrigger(cron2).nextExecutionTime(triggerContext);
}
});
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(new Date(System.currentTimeMillis())+"执行任务3开始------------");
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
return new CronTrigger(cron3).nextExecutionTime(triggerContext);
}
});
}
/*public void setCron(String cron) {
this.cron = cron;
}*/
}
第二步就是了解Corn表达式,进行定义自己想要的定时任务的corn表达式。Corn表示的具体含义自己可以在网上百度学习
主要格式 :* * * * * * * :Cron表达式的格式:秒 分 时 日 月 周 年(可选)
//默认的任务周期为 10秒
private String cron1 = "0/5 * * * * ?";
private String cron2 = "0/8 * * * * ?";
private String cron3 = "0/7 * * * * ?";
第三步: 在SpringBoot启动类上加一个注解,运行启动类就可以运行了
@SpringBootApplication
@MapperScan("com.ieng.dao")
@EnableScheduling
public class StartSortRankApplication {
public static void main(String[] args) {
SpringApplication.run(StartSortRankApplication.class, args);
}
}
运用结果图