1
2
3
4
5
6 package org.tailormap.api.scheduling;
7
8 import java.lang.invoke.MethodHandles;
9 import java.time.Instant;
10 import org.quartz.DisallowConcurrentExecution;
11 import org.quartz.JobDataMap;
12 import org.quartz.JobDetail;
13 import org.quartz.JobExecutionContext;
14 import org.quartz.PersistJobDataAfterExecution;
15 import org.slf4j.Logger;
16 import org.slf4j.LoggerFactory;
17 import org.springframework.lang.NonNull;
18 import org.springframework.scheduling.quartz.QuartzJobBean;
19
20
21 @DisallowConcurrentExecution
22 @PersistJobDataAfterExecution
23 public class PocTask extends QuartzJobBean {
24 private static final Logger logger =
25 LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
26
27 private String foo;
28
29 @Override
30 protected void executeInternal(@NonNull JobExecutionContext context) {
31 final JobDetail jobDetail = context.getJobDetail();
32
33
34 final JobDataMap mergedJobDataMap = context.getMergedJobDataMap();
35
36
37 final JobDataMap jobDataMap = jobDetail.getJobDataMap();
38
39
40 logger.debug("foo: {}", getFoo());
41
42 logger.debug(
43 "executing POC task {}:{}, details: {}",
44 jobDetail.getKey().getGroup(),
45 jobDetail.getKey().getName(),
46 mergedJobDataMap.getWrappedMap());
47
48 try {
49 for (int i = 0; i < 110; i += 10) {
50
51 long workingTime = (long) (Math.random() * 5000);
52 logger.debug("Working for {} ms", workingTime);
53 Thread.sleep(workingTime);
54 logger.debug("POC task is at {}%", i);
55 context.setResult(String.format("POC task is at %d%%", i));
56 }
57 } catch (InterruptedException e) {
58 logger.error("Thread interrupted", e);
59 }
60
61 jobDataMap.put("executions", (1 + (int) mergedJobDataMap.getOrDefault("executions", 0)));
62 jobDataMap.put("lastExecutionFinished", Instant.now());
63 jobDataMap.put("lastResult", "POC task executed successfully");
64 context.setResult("POC task executed successfully");
65 }
66
67 public String getFoo() {
68 return foo;
69 }
70
71 public void setFoo(String foo) {
72 this.foo = foo;
73 }
74 }