Timer原生实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void main(String[] args) {
//创建定时器
Timer timer = new Timer();
//创建task
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
System.out.println("这是任务执行体");
}
};

//从现在起推迟2秒后,每隔1秒执行
timer.schedule(timerTask, 2000, 1000);
}
lombok注解实现
  • 依赖
1
2
3
4
5
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
  • 实现
1
2
//启动类添加注解开启Scheduler
@EnableScheduling
1
2
3
4
5
6
7
8
9
@Component
public class SchedulerAchieve {

//使用corn表达式
@Scheduled(cron = "*/1 * * * * ?")
public void test() {
System.out.println("这是任务执行体");
}
}
Quartz实现
  • 依赖
1
2
3
4
5
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
  • job
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyJob implements Job {

public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.out.println("这是任务执行体");
//拿取JobDetail中的JobDataMap
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
//拿取Trigger中的JobDataMap
JobDataMap jobDataMapTrigger = jobExecutionContext.getTrigger().getJobDataMap();
System.out.println(jobDataMap.get("key"));
System.out.println(jobDataMapTrigger.get("key"));
}

}
  • 实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
public class MyScheduler {

//创建Scheduler
private static Scheduler scheduler;

public static void main(String[] args) throws SchedulerException, InterruptedException {
create();
start();
Thread.sleep(10000);
shutdown();
}

/**
* 创建定时任务
*/
public static void create() throws SchedulerException {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();

//JobDataMap可以用于执行体中获取使用
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("key","我是jobDataMap中的数据");

//创建JobDetail
JobDetail jobDetail = JobBuilder.newJob(MyJob.class)
//定义名字,组名默认值是DEFAULT
.withIdentity("job","group1")
//传入map值到JobDetail可用于执行体中获取
.setJobData(jobDataMap)
.build();

//不同的计划构建方式
//CronSchedule
String cronStr = "*/1 * * * * ? *";
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronStr); //传入cron
// //SimpleSchedule
// SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule()
// .withIntervalInSeconds(1)//每隔1s执行一次
// .repeatForever();//一直执行
// //CalendarIntervalSchedule
// CalendarIntervalScheduleBuilder scheduleBuilder = CalendarIntervalScheduleBuilder.calendarIntervalSchedule()
// //每秒执行1次
// .withIntervalInSeconds(1);

//创建Trigger
Trigger trigger = TriggerBuilder.newTrigger()
//定义名字,组名默认值是DEFAULT
.withIdentity("trigger","group1")
.startNow()//马上开始
// .startAt(new Date())//从什么时间开始
.withSchedule(scheduleBuilder)
.usingJobData(jobDataMap)
.build();

//jobDetail为执行体,trigger为执行计划
scheduler.scheduleJob(jobDetail, trigger);
}

/**
* 开启定时任务
*/
public static void start() throws SchedulerException {
scheduler.start();
}

/**
* 关闭定时任务
*/
public static void shutdown() throws SchedulerException {
scheduler.shutdown();
}
}