From 77d5aa4ef711f4753956b546f2e3b405b48b2114 Mon Sep 17 00:00:00 2001 From: lingniu Date: Wed, 1 Jul 2026 11:41:02 +0800 Subject: [PATCH] refactor: narrow active app component scans --- .../gb32960app/Gb32960IngestApplication.java | 2 +- .../jt808app/Jt808IngestApplication.java | 2 +- .../VehicleAnalyticsApplication.java | 2 +- .../historyapp/VehicleHistoryApplication.java | 2 +- .../PortainerComposeResourceLimitsTest.java | 18 ++++++++++++++++++ .../yutongmqttapp/YutongMqttApplication.java | 2 +- .../config/EventHistoryAutoConfiguration.java | 7 +++++++ .../EventHistoryAutoConfigurationTest.java | 2 ++ 8 files changed, 32 insertions(+), 5 deletions(-) diff --git a/modules/apps/gb32960-ingest-app/src/main/java/com/lingniu/ingest/gb32960app/Gb32960IngestApplication.java b/modules/apps/gb32960-ingest-app/src/main/java/com/lingniu/ingest/gb32960app/Gb32960IngestApplication.java index 93433641..35019bbb 100644 --- a/modules/apps/gb32960-ingest-app/src/main/java/com/lingniu/ingest/gb32960app/Gb32960IngestApplication.java +++ b/modules/apps/gb32960-ingest-app/src/main/java/com/lingniu/ingest/gb32960app/Gb32960IngestApplication.java @@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication(scanBasePackages = "com.lingniu.ingest") +@SpringBootApplication public class Gb32960IngestApplication { private static final Logger log = LoggerFactory.getLogger(Gb32960IngestApplication.class); diff --git a/modules/apps/jt808-ingest-app/src/main/java/com/lingniu/ingest/jt808app/Jt808IngestApplication.java b/modules/apps/jt808-ingest-app/src/main/java/com/lingniu/ingest/jt808app/Jt808IngestApplication.java index 989826ee..5a833540 100644 --- a/modules/apps/jt808-ingest-app/src/main/java/com/lingniu/ingest/jt808app/Jt808IngestApplication.java +++ b/modules/apps/jt808-ingest-app/src/main/java/com/lingniu/ingest/jt808app/Jt808IngestApplication.java @@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication(scanBasePackages = "com.lingniu.ingest") +@SpringBootApplication public class Jt808IngestApplication { private static final Logger log = LoggerFactory.getLogger(Jt808IngestApplication.class); diff --git a/modules/apps/vehicle-analytics-app/src/main/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsApplication.java b/modules/apps/vehicle-analytics-app/src/main/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsApplication.java index 4dbed352..3bf0d5a0 100644 --- a/modules/apps/vehicle-analytics-app/src/main/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsApplication.java +++ b/modules/apps/vehicle-analytics-app/src/main/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsApplication.java @@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication(scanBasePackages = "com.lingniu.ingest") +@SpringBootApplication public class VehicleAnalyticsApplication { private static final Logger log = LoggerFactory.getLogger(VehicleAnalyticsApplication.class); diff --git a/modules/apps/vehicle-history-app/src/main/java/com/lingniu/ingest/historyapp/VehicleHistoryApplication.java b/modules/apps/vehicle-history-app/src/main/java/com/lingniu/ingest/historyapp/VehicleHistoryApplication.java index 7e8986ef..48ac2363 100644 --- a/modules/apps/vehicle-history-app/src/main/java/com/lingniu/ingest/historyapp/VehicleHistoryApplication.java +++ b/modules/apps/vehicle-history-app/src/main/java/com/lingniu/ingest/historyapp/VehicleHistoryApplication.java @@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication(scanBasePackages = "com.lingniu.ingest") +@SpringBootApplication public class VehicleHistoryApplication { private static final Logger log = LoggerFactory.getLogger(VehicleHistoryApplication.class); diff --git a/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/PortainerComposeResourceLimitsTest.java b/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/PortainerComposeResourceLimitsTest.java index d3ee5b30..8e5ee531 100644 --- a/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/PortainerComposeResourceLimitsTest.java +++ b/modules/apps/vehicle-history-app/src/test/java/com/lingniu/ingest/historyapp/PortainerComposeResourceLimitsTest.java @@ -5,6 +5,7 @@ import org.junit.jupiter.api.Test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -144,6 +145,23 @@ class PortainerComposeResourceLimitsTest { .doesNotContain("MQ->>"); } + @Test + void activeSpringBootAppsDoNotScanWholeIngestPackage() throws IOException { + Path root = repositoryRoot(); + List activeApps = List.of( + root.resolve("modules/apps/gb32960-ingest-app/src/main/java/com/lingniu/ingest/gb32960app/Gb32960IngestApplication.java"), + root.resolve("modules/apps/jt808-ingest-app/src/main/java/com/lingniu/ingest/jt808app/Jt808IngestApplication.java"), + root.resolve("modules/apps/yutong-mqtt-app/src/main/java/com/lingniu/ingest/yutongmqttapp/YutongMqttApplication.java"), + root.resolve("modules/apps/vehicle-history-app/src/main/java/com/lingniu/ingest/historyapp/VehicleHistoryApplication.java"), + root.resolve("modules/apps/vehicle-analytics-app/src/main/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsApplication.java")); + + for (Path app : activeApps) { + assertThat(Files.readString(app)) + .contains("@SpringBootApplication") + .doesNotContain("scanBasePackages = \"com.lingniu.ingest\""); + } + } + @Test void splitRunbookKeepsAnalyticsAsJt808MetricRuntimeOnly() throws IOException { String splitRunbook = Files.readString(repositoryRoot() diff --git a/modules/apps/yutong-mqtt-app/src/main/java/com/lingniu/ingest/yutongmqttapp/YutongMqttApplication.java b/modules/apps/yutong-mqtt-app/src/main/java/com/lingniu/ingest/yutongmqttapp/YutongMqttApplication.java index facdb868..274fa344 100644 --- a/modules/apps/yutong-mqtt-app/src/main/java/com/lingniu/ingest/yutongmqttapp/YutongMqttApplication.java +++ b/modules/apps/yutong-mqtt-app/src/main/java/com/lingniu/ingest/yutongmqttapp/YutongMqttApplication.java @@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -@SpringBootApplication(scanBasePackages = "com.lingniu.ingest") +@SpringBootApplication public class YutongMqttApplication { private static final Logger log = LoggerFactory.getLogger(YutongMqttApplication.class); diff --git a/modules/services/event-history-service/src/main/java/com/lingniu/ingest/eventhistory/config/EventHistoryAutoConfiguration.java b/modules/services/event-history-service/src/main/java/com/lingniu/ingest/eventhistory/config/EventHistoryAutoConfiguration.java index 1b68e036..44d6b585 100644 --- a/modules/services/event-history-service/src/main/java/com/lingniu/ingest/eventhistory/config/EventHistoryAutoConfiguration.java +++ b/modules/services/event-history-service/src/main/java/com/lingniu/ingest/eventhistory/config/EventHistoryAutoConfiguration.java @@ -2,6 +2,7 @@ package com.lingniu.ingest.eventhistory.config; import com.lingniu.ingest.api.consumer.EnvelopeConsumerProcessor; import com.lingniu.ingest.api.consumer.EnvelopeDeadLetterSink; +import com.lingniu.ingest.eventhistory.ApiExceptionHandler; import com.lingniu.ingest.eventhistory.EventHistoryEnvelopeIngestor; import com.lingniu.ingest.eventhistory.Gb32960DecodedFrameService; import com.lingniu.ingest.eventhistory.Gb32960FrameController; @@ -75,6 +76,12 @@ public class EventHistoryAutoConfiguration { return new EnvelopeConsumerProcessor("event-history-raw", ingestor, deadLetterSink); } + @Bean + @ConditionalOnMissingBean + public ApiExceptionHandler apiExceptionHandler() { + return new ApiExceptionHandler(); + } + @Bean @ConditionalOnBean(Gb32960MessageDecoder.class) @ConditionalOnMissingBean diff --git a/modules/services/event-history-service/src/test/java/com/lingniu/ingest/eventhistory/config/EventHistoryAutoConfigurationTest.java b/modules/services/event-history-service/src/test/java/com/lingniu/ingest/eventhistory/config/EventHistoryAutoConfigurationTest.java index e5fcb08e..4b32bec9 100644 --- a/modules/services/event-history-service/src/test/java/com/lingniu/ingest/eventhistory/config/EventHistoryAutoConfigurationTest.java +++ b/modules/services/event-history-service/src/test/java/com/lingniu/ingest/eventhistory/config/EventHistoryAutoConfigurationTest.java @@ -2,6 +2,7 @@ package com.lingniu.ingest.eventhistory.config; import com.lingniu.ingest.api.consumer.EnvelopeConsumerProcessor; import com.lingniu.ingest.api.consumer.EnvelopeDeadLetterSink; +import com.lingniu.ingest.eventhistory.ApiExceptionHandler; import com.lingniu.ingest.eventhistory.EventHistoryEnvelopeIngestor; import com.lingniu.ingest.eventhistory.Gb32960DecodedFrameService; import com.lingniu.ingest.eventhistory.Gb32960FrameController; @@ -117,6 +118,7 @@ class EventHistoryAutoConfigurationTest { .run(context -> { assertThat(context).hasSingleBean(LocationHistoryController.class); assertThat(context).hasSingleBean(RawFrameHistoryController.class); + assertThat(context).hasSingleBean(ApiExceptionHandler.class); assertThat(context).doesNotHaveBean(TelemetryFieldHistoryController.class); assertThat(context).doesNotHaveBean(Jt808LocationHistoryController.class); assertThat(context).doesNotHaveBean(Jt808RawFrameHistoryController.class);