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