Skip to content

Commit 0d3f703

Browse files
author
nicky
committed
SpringBoot集成Spring task例子工程
1 parent fccce87 commit 0d3f703

File tree

4 files changed

+99
-2
lines changed

4 files changed

+99
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package com.example.springboot.scheduler;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.beans.factory.annotation.Qualifier;
6+
import org.springframework.boot.CommandLineRunner;
7+
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
8+
import org.springframework.scheduling.support.CronTrigger;
9+
import org.springframework.scheduling.support.PeriodicTrigger;
10+
import org.springframework.stereotype.Component;
11+
12+
import java.time.LocalDateTime;
13+
import java.time.format.DateTimeFormatter;
14+
import java.util.Map;
15+
import java.util.concurrent.ConcurrentHashMap;
16+
import java.util.concurrent.ConcurrentMap;
17+
import java.util.concurrent.ScheduledFuture;
18+
19+
/**
20+
* <pre>
21+
*
22+
* </pre>
23+
*
24+
* <pre>
25+
* @author mazq
26+
* 修改记录
27+
* 修改后版本: 修改人: 修改日期: 2020/07/22 13:36 修改内容:
28+
* </pre>
29+
*/
30+
@Component
31+
@Slf4j
32+
public class ApplicationRuner implements CommandLineRunner {
33+
34+
@Autowired
35+
private ThreadPoolTaskScheduler taskScheduler;
36+
@Autowired
37+
private CronTrigger cronTrigger;
38+
@Autowired
39+
@Qualifier("periodicTrigger")
40+
private PeriodicTrigger periodicTrigger;
41+
42+
@Override
43+
public void run(String... args) throws Exception {
44+
// taskScheduler.schedule(new TaskThread(Thread.currentThread().getName()), new Date());
45+
// taskScheduler.scheduleWithFixedDelay(new TaskThread(Thread.currentThread().getName()), 1000);
46+
// taskScheduler.scheduleWithFixedDelay(new TaskThread(Thread.currentThread().getName()), new Date(), 1000);
47+
// taskScheduler.scheduleAtFixedRate(new TaskThread("Thread.currentThread().getName()), new Date(), 2000);
48+
// taskScheduler.scheduleAtFixedRate(new TaskThread(Thread.currentThread().getName()), 2000);
49+
taskScheduler.schedule(new TaskThread(Thread.currentThread().getName()), cronTrigger);
50+
// taskScheduler.schedule(new TaskThread(Thread.currentThread().getName()), periodicTrigger);
51+
}
52+
53+
class TaskThread implements Runnable {
54+
String name;
55+
public TaskThread(String name) {
56+
this.name = name;
57+
}
58+
@Override
59+
public void run() {
60+
log.info("task is run on thread :[{}],current time:[{}]",name,
61+
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
62+
}
63+
}
64+
}

springboot-scheduler-task/src/main/java/com/example/springboot/scheduler/configuration/TaskSchedulerConfiguration.java

+23
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
import org.springframework.context.annotation.Configuration;
55
import org.springframework.scheduling.annotation.EnableScheduling;
66
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
7+
import org.springframework.scheduling.support.CronTrigger;
8+
import org.springframework.scheduling.support.PeriodicTrigger;
9+
10+
import java.util.concurrent.TimeUnit;
711

812
/**
913
* <pre>
@@ -25,7 +29,26 @@ public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
2529
ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();
2630
threadPoolTaskScheduler.setPoolSize(5);
2731
threadPoolTaskScheduler.setThreadNamePrefix("ThreadPoolTaskScheduler");
32+
threadPoolTaskScheduler.setWaitForTasksToCompleteOnShutdown(true);
33+
threadPoolTaskScheduler.setAwaitTerminationSeconds(60);
2834
return threadPoolTaskScheduler;
2935
}
3036

37+
@Bean
38+
public CronTrigger cronTrigger() {
39+
return new CronTrigger("0/3 * * * * ?");
40+
}
41+
42+
@Bean("periodicTrigger")
43+
public PeriodicTrigger periodicTrigger() {
44+
return new PeriodicTrigger(2000, TimeUnit.MICROSECONDS);
45+
}
46+
47+
@Bean("periodicFixedDelayTrigger")
48+
public PeriodicTrigger periodicFixedDelayTrigger() {
49+
PeriodicTrigger periodicTrigger = new PeriodicTrigger(2000, TimeUnit.MICROSECONDS);
50+
periodicTrigger.setFixedRate(true);
51+
periodicTrigger.setInitialDelay(1000);
52+
return periodicTrigger;
53+
}
3154
}

springboot-scheduler-task/src/main/java/com/example/springboot/scheduler/service/TaskService.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
@Slf4j
2323
public class TaskService {
2424

25-
@Scheduled(fixedDelay = 3000)
25+
@Scheduled(fixedDelay = 10000)
2626
public void testFixedDelay() {
2727
log.info("fixedDelay test,thread name:[{}],execute time:[{}]",Thread.currentThread().getName(),
2828
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
@@ -35,7 +35,7 @@ public void testCron(){
3535
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
3636
}
3737

38-
@Scheduled(fixedRate = 5000)
38+
@Scheduled(initialDelay = 5000, fixedRate = 10000)
3939
public void testFixedRate() {
4040
log.info("fixedRate test,thread name:[{}],execute time:[{}]",Thread.currentThread().getName(),
4141
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
spring:
2+
task:
3+
scheduling:
4+
pool:
5+
size: 5
6+
thread-name-prefix: ThreadPoolTaskScheduler-
7+
execution:
8+
pool:
9+
allow-core-thread-timeout: true
10+

0 commit comments

Comments
 (0)