@@ -58,6 +58,7 @@ 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 ;
6162 private final Duration schedule ;
6263 private final boolean tickerMode ;
6364 private volatile boolean closed ;
@@ -66,6 +67,7 @@ private ScheduledDataLoaderRegistry(Builder builder) {
6667 super ();
6768 this .dataLoaders .putAll (builder .dataLoaders );
6869 this .scheduledExecutorService = builder .scheduledExecutorService ;
70+ this .defaultExecutorUsed = builder .defaultExecutorUsed ;
6971 this .schedule = builder .schedule ;
7072 this .tickerMode = builder .tickerMode ;
7173 this .closed = false ;
@@ -79,6 +81,16 @@ private ScheduledDataLoaderRegistry(Builder builder) {
7981 @ Override
8082 public void close () {
8183 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 ;
8294 }
8395
8496 /**
@@ -258,9 +270,18 @@ public static class Builder {
258270 private final Map <DataLoader <?, ?>, DispatchPredicate > dataLoaderPredicates = new LinkedHashMap <>();
259271 private DispatchPredicate dispatchPredicate = DispatchPredicate .DISPATCH_ALWAYS ;
260272 private ScheduledExecutorService scheduledExecutorService ;
273+ private boolean defaultExecutorUsed = false ;
261274 private Duration schedule = Duration .ofMillis (10 );
262275 private boolean tickerMode = false ;
263276
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+ */
264285 public Builder scheduledExecutorService (ScheduledExecutorService executorService ) {
265286 this .scheduledExecutorService = nonNull (executorService );
266287 return this ;
@@ -350,6 +371,7 @@ public Builder tickerMode(boolean tickerMode) {
350371 public ScheduledDataLoaderRegistry build () {
351372 if (scheduledExecutorService == null ) {
352373 scheduledExecutorService = Executors .newSingleThreadScheduledExecutor ();
374+ defaultExecutorUsed = true ;
353375 }
354376 return new ScheduledDataLoaderRegistry (this );
355377 }
0 commit comments