Skip to content

Commit b3c11cc

Browse files
committed
filter out non-scheduler executor services
1 parent 66522e6 commit b3c11cc

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

libs/micronaut-worker/src/main/java/com/agorapulse/worker/executor/DefaultExecutorServiceProvider.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,24 @@
2020
import com.agorapulse.worker.Job;
2121
import com.agorapulse.worker.JobConfiguration;
2222
import io.micronaut.context.BeanContext;
23+
import io.micronaut.context.Qualifier;
2324
import io.micronaut.inject.qualifiers.Qualifiers;
2425
import io.micronaut.scheduling.ScheduledExecutorTaskScheduler;
2526
import io.micronaut.scheduling.TaskScheduler;
2627
import jakarta.inject.Singleton;
2728

2829
import java.io.Closeable;
29-
import java.util.List;
30+
import java.util.Map;
3031
import java.util.Optional;
31-
import java.util.concurrent.CopyOnWriteArrayList;
32+
import java.util.concurrent.ConcurrentHashMap;
3233
import java.util.concurrent.ExecutorService;
3334
import java.util.concurrent.Executors;
3435
import java.util.concurrent.ScheduledExecutorService;
3536

3637
@Singleton
3738
public class DefaultExecutorServiceProvider implements ExecutorServiceProvider, Closeable {
3839

39-
private final List<ExecutorService> createdExecutors = new CopyOnWriteArrayList<>();
40+
private final Map<String, ExecutorService> createdExecutors = new ConcurrentHashMap<>();
4041

4142
private final BeanContext beanContext;
4243

@@ -46,7 +47,7 @@ public DefaultExecutorServiceProvider(BeanContext beanContext) {
4647

4748
@Override
4849
public void close() {
49-
for (ExecutorService executor : createdExecutors) {
50+
for (ExecutorService executor : createdExecutors.values()) {
5051
executor.shutdown();
5152
}
5253
}
@@ -79,14 +80,23 @@ public TaskScheduler getTaskScheduler(Job job) {
7980
}
8081

8182
private ExecutorService getExecutor(String schedulerName, int fork) {
83+
if (createdExecutors.containsKey(schedulerName)) {
84+
return createdExecutors.get(schedulerName);
85+
}
86+
87+
Qualifier<ExecutorService> byName = Qualifiers.byName(schedulerName);
88+
8289
return beanContext
83-
.findBean(ExecutorService.class, Qualifiers.byName(schedulerName))
90+
.findBean(ExecutorService.class, byName)
91+
.filter(ScheduledExecutorService.class::isInstance)
8492
.orElseGet(() -> {
8593
ExecutorService service = Executors.newScheduledThreadPool(fork, new NamedThreadFactory(schedulerName));
8694

87-
createdExecutors.add(service);
95+
createdExecutors.put(schedulerName, service);
8896

89-
beanContext.registerSingleton(ExecutorService.class, service, Qualifiers.byName(schedulerName));
97+
if (beanContext.findBean(ExecutorService.class, byName).isEmpty()) {
98+
beanContext.registerSingleton(ExecutorService.class, service, byName);
99+
}
90100

91101
return service;
92102
});

0 commit comments

Comments
 (0)