覆盖
策略 | 解释 |
---|---|
覆盖 | 你别干了,我来干 |
新批次开始之前会尝试中断旧批次的线程,但是不一定能终止掉。这里可以理解成在新批次开始前,调用了一个旧批次任务线程池的shutDownNow方法
客户端代码
无法中断的情况
java@Slf4j @Component public class TestOverlayCanNotInterrupted extends AbstractJobExecutor { @Override protected ExecuteResult doJobExecute(JobArgs jobArgs) { log.info("{}开始执行任务", Thread.currentThread().getName()); for(int i = 1; i <= 5; i++) { log.info("{}执行第{}次", Thread.currentThread().getName(), i); ThreadUtil.sleep(60, TimeUnit.SECONDS); } log.info("{}任务执行完成", Thread.currentThread().getName()); return ExecuteResult.success(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14可以中断的情况
java@Slf4j @Component public class TestOverlayCanInterrupted extends AbstractJobExecutor { @Override protected ExecuteResult doJobExecute(JobArgs jobArgs) { log.info("{}开始执行任务", Thread.currentThread().getName()); int i = 1; while (!Thread.currentThread().isInterrupted()) { log.info("{}执行第{}次", Thread.currentThread().getName(), i); try { Thread.sleep(60000); }catch (InterruptedException e) { log.info("{}任务被中断", Thread.currentThread().getName()); break; } i++; } log.info("{}任务执行完成", Thread.currentThread().getName()); return ExecuteResult.success(); } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
页面配置
无法中断的配置
配置项 配置内容 任务名称 测试阻塞策略-覆盖-无法中断 执行器名称 com.bjltd.test.TestOverlayCanNotInterrupted 阻塞策略 覆盖 触发类型 固定时间 间隔时长 60秒 超时时间 600秒 可以中断的配置
配置项 配置内容 任务名称 测试阻塞策略-覆盖-可中断 执行器名称 com.bjltd.test.TestOverlayCanInterrupted 阻塞策略 覆盖 触发类型 固定时间 间隔时长 60秒 超时时间 600秒
测试结果
无法中断的测试结果
客户端日志信息:
shell2024-09-24 11:19:51 [snail-netty-server-1] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[1716] 任务调度成功. 2024-09-24 11:19:51 [snail-job-job-1,716-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,716-1开始执行任务 2024-09-24 11:19:51 [snail-job-job-1,716-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,716-1执行第1次 2024-09-24 11:20:01 [nioEventLoopGroup-2-1] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[6] 2024-09-24 11:20:43 [snail-job-job-1,716-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,716-1执行第2次 2024-09-24 11:20:43 [snail-job-job-1,716-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,716-1执行第3次 2024-09-24 11:20:50 [snail-netty-server-3] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[1717] 任务调度成功. 2024-09-24 11:20:50 [snail-job-job-1,717-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,717-1开始执行任务 2024-09-24 11:20:50 [snail-job-job-1,717-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,717-1执行第1次 2024-09-24 11:21:01 [nioEventLoopGroup-2-1] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[14] 2024-09-24 11:21:43 [snail-job-job-1,717-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,717-1执行第2次 2024-09-24 11:21:43 [snail-job-job-1,717-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,717-1执行第3次 2024-09-24 11:21:43 [snail-job-job-1,716-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,716-1执行第4次 2024-09-24 11:21:50 [snail-netty-server-5] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[1718] 任务调度成功. 2024-09-24 11:21:50 [snail-job-job-1,718-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,718-1开始执行任务 2024-09-24 11:21:50 [snail-job-job-1,718-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,718-1执行第1次 2024-09-24 11:22:01 [nioEventLoopGroup-2-1] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[22] 2024-09-24 11:22:43 [snail-job-job-1,717-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,717-1执行第4次 2024-09-24 11:22:43 [snail-job-job-1,716-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,716-1执行第5次 2024-09-24 11:22:43 [snail-job-job-1,718-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,718-1执行第2次 2024-09-24 11:22:43 [snail-job-job-1,718-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,718-1执行第3次 2024-09-24 11:22:50 [snail-netty-server-7] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[1719] 任务调度成功. 2024-09-24 11:22:50 [snail-job-job-1,719-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,719-1开始执行任务 2024-09-24 11:22:50 [snail-job-job-1,719-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,719-1执行第1次 2024-09-24 11:23:01 [nioEventLoopGroup-2-1] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[30] 2024-09-24 11:23:43 [snail-job-job-1,719-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,719-1执行第2次 2024-09-24 11:23:43 [snail-job-job-1,719-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,719-1执行第3次 2024-09-24 11:23:43 [snail-job-job-1,717-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,717-1执行第5次 2024-09-24 11:23:43 [snail-job-job-1,716-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,716-1任务执行完成 2024-09-24 11:23:43 [snail-job-job-1,718-1] INFO c.b.t.TestOverlayCanNotInterrupted - snail-job-job-1,718-1执行第4次 2024-09-24 11:23:50 [snail-netty-server-9] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[1720] 任务调度成功.
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从日志打印可以看出,1716这个批次并没有被真正中断,还是会在后台持续的工作。
任务批次列表中的显示
可以中断的测试结果
客户端日志信息:
shell2024-09-24 15:04:41 [snail-netty-server-1] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[1935] 任务调度成功. 2024-09-24 15:04:41 [snail-job-job-1,935-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,935-1开始执行任务 2024-09-24 15:04:41 [snail-job-job-1,935-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,935-1执行第1次 2024-09-24 15:04:51 [nioEventLoopGroup-2-1] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[4] 2024-09-24 15:05:40 [snail-job-job-1,935-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,935-1任务被中断 2024-09-24 15:05:40 [snail-job-job-1,935-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,935-1任务执行完成 2024-09-24 15:05:41 [snail-netty-server-3] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[1936] 任务调度成功. 2024-09-24 15:05:41 [snail-job-job-1,936-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,936-1开始执行任务 2024-09-24 15:05:41 [snail-job-job-1,936-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,936-1执行第1次 2024-09-24 15:05:52 [nioEventLoopGroup-2-1] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[12] 2024-09-24 15:06:40 [snail-job-job-1,936-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,936-1任务被中断 2024-09-24 15:06:40 [snail-job-job-1,936-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,936-1任务执行完成 2024-09-24 15:06:40 [snail-netty-server-5] INFO c.a.s.c.job.core.client.JobEndPoint - 批次:[1937] 任务调度成功. 2024-09-24 15:06:40 [snail-job-job-1,937-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,937-1开始执行任务 2024-09-24 15:06:40 [snail-job-job-1,937-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,937-1执行第1次 2024-09-24 15:06:51 [nioEventLoopGroup-2-1] INFO c.a.s.c.c.l.report.ReportLogListener - Data report log successfully requestId:[20] 2024-09-24 15:07:40 [snail-job-job-1,937-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,937-1任务被中断 2024-09-24 15:07:40 [snail-job-job-1,937-1] INFO c.b.test.TestOverlayCanInterrupted - snail-job-job-1,937-1任务执行完成
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从日志输出能看出来,每个批次的任务都会被后面的新批次任务给停止。
任务批次列表中的显示
测试总结
- 新批次任务会停止上个批次任务,但是不保证一定停止成功。
- 如果想让任务拥有被中断的能力,那么需要在写任务代码时,自己处理。比如本例通用循环判断当前线程是不是被中断。如果你的任务本身不具备这种能力。基本相当于下面将要验证的并行效果一样了。