@@ -58,6 +58,8 @@ public class ScheduledDataLoaderRegistry extends DataLoaderRegistry implements A
5858 private final Map <DataLoader <?, ?>, DispatchPredicate > dataLoaderPredicates = new ConcurrentHashMap <>();
5959 private final DispatchPredicate dispatchPredicate ;
6060 private final ScheduledExecutorService scheduledExecutorService ;
61+ private final boolean defaultExecutorUsed ;
62+
6163 private final Duration schedule ;
6264 private final boolean tickerMode ;
6365 private volatile boolean closed ;
@@ -66,6 +68,7 @@ private ScheduledDataLoaderRegistry(Builder builder) {
6668 super ();
6769 this .dataLoaders .putAll (builder .dataLoaders );
6870 this .scheduledExecutorService = builder .scheduledExecutorService ;
71+ this .defaultExecutorUsed = builder .defaultExecutorUsed ;
6972 this .schedule = builder .schedule ;
7073 this .tickerMode = builder .tickerMode ;
7174 this .closed = false ;
@@ -79,6 +82,16 @@ private ScheduledDataLoaderRegistry(Builder builder) {
7982 @ Override
8083 public void close () {
8184 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 ;
8295 }
8396
8497 /**
@@ -258,9 +271,18 @@ public static class Builder {
258271 private final Map <DataLoader <?, ?>, DispatchPredicate > dataLoaderPredicates = new LinkedHashMap <>();
259272 private DispatchPredicate dispatchPredicate = DispatchPredicate .DISPATCH_ALWAYS ;
260273 private ScheduledExecutorService scheduledExecutorService ;
274+ private boolean defaultExecutorUsed = false ;
261275 private Duration schedule = Duration .ofMillis (10 );
262276 private boolean tickerMode = false ;
263277
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+ */
264286 public Builder scheduledExecutorService (ScheduledExecutorService executorService ) {
265287 this .scheduledExecutorService = nonNull (executorService );
266288 return this ;
@@ -350,6 +372,7 @@ public Builder tickerMode(boolean tickerMode) {
350372 public ScheduledDataLoaderRegistry build () {
351373 if (scheduledExecutorService == null ) {
352374 scheduledExecutorService = Executors .newSingleThreadScheduledExecutor ();
375+ defaultExecutorUsed = true ;
353376 }
354377 return new ScheduledDataLoaderRegistry (this );
355378 }
0 commit comments