@@ -58,6 +58,8 @@ public class ScheduledDataLoaderRegistry extends DataLoaderRegistry implements A
58
58
private final Map <DataLoader <?, ?>, DispatchPredicate > dataLoaderPredicates = new ConcurrentHashMap <>();
59
59
private final DispatchPredicate dispatchPredicate ;
60
60
private final ScheduledExecutorService scheduledExecutorService ;
61
+ private final boolean defaultExecutorUsed ;
62
+
61
63
private final Duration schedule ;
62
64
private final boolean tickerMode ;
63
65
private volatile boolean closed ;
@@ -66,6 +68,7 @@ private ScheduledDataLoaderRegistry(Builder builder) {
66
68
super ();
67
69
this .dataLoaders .putAll (builder .dataLoaders );
68
70
this .scheduledExecutorService = builder .scheduledExecutorService ;
71
+ this .defaultExecutorUsed = builder .defaultExecutorUsed ;
69
72
this .schedule = builder .schedule ;
70
73
this .tickerMode = builder .tickerMode ;
71
74
this .closed = false ;
@@ -79,6 +82,16 @@ private ScheduledDataLoaderRegistry(Builder builder) {
79
82
@ Override
80
83
public void close () {
81
84
closed = true ;
85
+ if (defaultExecutorUsed ) {
86
+ scheduledExecutorService .shutdown ();
87
+ }
88
+ }
89
+
90
+ /**
91
+ * @return executor being used by this registry
92
+ */
93
+ public ScheduledExecutorService getScheduledExecutorService () {
94
+ return scheduledExecutorService ;
82
95
}
83
96
84
97
/**
@@ -258,9 +271,18 @@ public static class Builder {
258
271
private final Map <DataLoader <?, ?>, DispatchPredicate > dataLoaderPredicates = new LinkedHashMap <>();
259
272
private DispatchPredicate dispatchPredicate = DispatchPredicate .DISPATCH_ALWAYS ;
260
273
private ScheduledExecutorService scheduledExecutorService ;
274
+ private boolean defaultExecutorUsed = false ;
261
275
private Duration schedule = Duration .ofMillis (10 );
262
276
private boolean tickerMode = false ;
263
277
278
+ /**
279
+ * If you provide a {@link ScheduledExecutorService} then it will NOT be shutdown when
280
+ * {@link ScheduledDataLoaderRegistry#close()} is called. This is left to the code that made this setup code
281
+ *
282
+ * @param executorService the executor service to run the ticker on
283
+ *
284
+ * @return this builder for a fluent pattern
285
+ */
264
286
public Builder scheduledExecutorService (ScheduledExecutorService executorService ) {
265
287
this .scheduledExecutorService = nonNull (executorService );
266
288
return this ;
@@ -350,6 +372,7 @@ public Builder tickerMode(boolean tickerMode) {
350
372
public ScheduledDataLoaderRegistry build () {
351
373
if (scheduledExecutorService == null ) {
352
374
scheduledExecutorService = Executors .newSingleThreadScheduledExecutor ();
375
+ defaultExecutorUsed = true ;
353
376
}
354
377
return new ScheduledDataLoaderRegistry (this );
355
378
}
0 commit comments