Skip to content

Commit 5f72562

Browse files
committed
GH-1149 - Cache modules looked up by type in observability event listener.
To avoid repeated, expensive full lookups across the entire class space for each listener invocation.
1 parent 4cf9b5c commit 5f72562

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

spring-modulith-observability/src/main/java/org/springframework/modulith/observability/support/ModuleEventListener.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,15 @@
2020
import io.micrometer.observation.Observation.Event;
2121
import io.micrometer.observation.ObservationRegistry;
2222

23+
import java.util.Map;
24+
import java.util.Optional;
25+
import java.util.concurrent.ConcurrentHashMap;
2326
import java.util.function.Supplier;
2427

2528
import org.springframework.context.ApplicationEvent;
2629
import org.springframework.context.ApplicationListener;
2730
import org.springframework.context.PayloadApplicationEvent;
31+
import org.springframework.modulith.core.ApplicationModule;
2832
import org.springframework.modulith.observability.support.ModulithObservations.Events;
2933
import org.springframework.modulith.runtime.ApplicationModulesRuntime;
3034
import org.springframework.util.Assert;
@@ -39,6 +43,8 @@ public class ModuleEventListener implements ApplicationListener<ApplicationEvent
3943
private final Supplier<MeterRegistry> meterRegistry;
4044
private final CrossModuleEventCounterFactory factory;
4145

46+
private final Map<Class<?>, Optional<ApplicationModule>> modulesByType;
47+
4248
/**
4349
* Creates a new {@link ModuleEventListener} for the given {@link ApplicationModulesRuntime} and
4450
* {@link ObservationRegistry} and {@link MeterRegistry}.
@@ -61,6 +67,8 @@ public ModuleEventListener(ApplicationModulesRuntime runtime,
6167
this.observationRegistry = observationRegistrySupplier;
6268
this.meterRegistry = meterRegistrySupplier;
6369
this.factory = counterFactory;
70+
71+
this.modulesByType = new ConcurrentHashMap<>();
6472
}
6573

6674
/*
@@ -81,8 +89,7 @@ public void onApplicationEvent(ApplicationEvent event) {
8189
return;
8290
}
8391

84-
var moduleByType = runtime.get()
85-
.getModuleByType(payloadType.getSimpleName())
92+
var moduleByType = modulesByType.computeIfAbsent(payloadType, it -> runtime.get().getModuleByType(it))
8693
.orElse(null);
8794

8895
if (moduleByType == null) {

0 commit comments

Comments
 (0)