From fe5bc1f532797c5225ee3ef1a7b54095099e4b86 Mon Sep 17 00:00:00 2001 From: lingniu Date: Wed, 1 Jul 2026 02:37:18 +0800 Subject: [PATCH] refactor: require redis for jt808 mileage state --- .../VehicleAnalyticsAppCompositionTest.java | 6 +++++- .../config/VehicleStatAutoConfiguration.java | 9 --------- .../config/VehicleStatAutoConfigurationTest.java | 13 ++++++++----- .../jt808/InMemoryJt808MileageStateStore.java | 2 +- 4 files changed, 14 insertions(+), 16 deletions(-) rename modules/services/vehicle-stat-service/src/{main => test}/java/com/lingniu/ingest/vehiclestat/jt808/InMemoryJt808MileageStateStore.java (89%) diff --git a/modules/apps/vehicle-analytics-app/src/test/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsAppCompositionTest.java b/modules/apps/vehicle-analytics-app/src/test/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsAppCompositionTest.java index a0528d18..b79ce51f 100644 --- a/modules/apps/vehicle-analytics-app/src/test/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsAppCompositionTest.java +++ b/modules/apps/vehicle-analytics-app/src/test/java/com/lingniu/ingest/analyticsapp/VehicleAnalyticsAppCompositionTest.java @@ -1,5 +1,6 @@ package com.lingniu.ingest.analyticsapp; +import com.fasterxml.jackson.databind.ObjectMapper; import com.lingniu.ingest.api.consumer.EnvelopeConsumerProcessor; import com.lingniu.ingest.sink.mq.KafkaEnvelopeDeadLetterSink; import com.lingniu.ingest.sink.mq.KafkaEventSink; @@ -17,6 +18,7 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.context.ApplicationContext; +import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.util.ClassUtils; @@ -35,6 +37,8 @@ class VehicleAnalyticsAppCompositionTest { .withAllowBeanDefinitionOverriding(true) .withBean("kafkaProducer", KafkaProducer.class, VehicleAnalyticsAppCompositionTest::kafkaProducer) .withBean(JdbcTemplate.class, () -> mock(JdbcTemplate.class)) + .withBean(StringRedisTemplate.class, () -> mock(StringRedisTemplate.class)) + .withBean(ObjectMapper.class, ObjectMapper::new) .withPropertyValues( "lingniu.ingest.sink.mq.enabled=true", "lingniu.ingest.sink.mq.type=kafka", @@ -43,7 +47,7 @@ class VehicleAnalyticsAppCompositionTest { "lingniu.ingest.vehicle-state.enabled=false", "lingniu.ingest.vehicle-stat.enabled=true", "lingniu.ingest.vehicle-stat.jt808.enabled=true", - "lingniu.ingest.vehicle-stat.jt808.state-store=memory", + "lingniu.ingest.vehicle-stat.jt808.state-store=redis", "lingniu.ingest.event-file-store.enabled=false", "lingniu.ingest.event-history.enabled=false", "lingniu.ingest.gb32960.enabled=false") diff --git a/modules/services/vehicle-stat-service/src/main/java/com/lingniu/ingest/vehiclestat/config/VehicleStatAutoConfiguration.java b/modules/services/vehicle-stat-service/src/main/java/com/lingniu/ingest/vehiclestat/config/VehicleStatAutoConfiguration.java index 5b80736e..f22ef8b4 100644 --- a/modules/services/vehicle-stat-service/src/main/java/com/lingniu/ingest/vehiclestat/config/VehicleStatAutoConfiguration.java +++ b/modules/services/vehicle-stat-service/src/main/java/com/lingniu/ingest/vehiclestat/config/VehicleStatAutoConfiguration.java @@ -6,7 +6,6 @@ import com.lingniu.ingest.vehiclestat.JdbcVehicleStatMetricRepository; import com.lingniu.ingest.vehiclestat.VehicleStatController; import com.lingniu.ingest.vehiclestat.VehicleStatEnvelopeIngestor; import com.lingniu.ingest.vehiclestat.VehicleStatRepository; -import com.lingniu.ingest.vehiclestat.jt808.InMemoryJt808MileageStateStore; import com.lingniu.ingest.vehiclestat.jt808.Jt808LocationPointExtractor; import com.lingniu.ingest.vehiclestat.jt808.Jt808MileageStateStore; import com.lingniu.ingest.vehiclestat.jt808.Jt808MileageStreamProcessor; @@ -63,14 +62,6 @@ public class VehicleStatAutoConfiguration { jt808.getRedisKeyPrefix(), Duration.ofDays(jt808.getStateTtlDays())); } - @Bean - @ConditionalOnProperty(prefix = "lingniu.ingest.vehicle-stat.jt808", name = "enabled", havingValue = "true") - @ConditionalOnProperty(prefix = "lingniu.ingest.vehicle-stat.jt808", name = "state-store", havingValue = "memory") - @ConditionalOnMissingBean(Jt808MileageStateStore.class) - public Jt808MileageStateStore inMemoryJt808MileageStateStore() { - return new InMemoryJt808MileageStateStore(); - } - @Bean @ConditionalOnBean({Jt808LocationPointExtractor.class, Jt808MileageStateStore.class, VehicleStatRepository.class}) diff --git a/modules/services/vehicle-stat-service/src/test/java/com/lingniu/ingest/vehiclestat/config/VehicleStatAutoConfigurationTest.java b/modules/services/vehicle-stat-service/src/test/java/com/lingniu/ingest/vehiclestat/config/VehicleStatAutoConfigurationTest.java index e7473287..9b598772 100644 --- a/modules/services/vehicle-stat-service/src/test/java/com/lingniu/ingest/vehiclestat/config/VehicleStatAutoConfigurationTest.java +++ b/modules/services/vehicle-stat-service/src/test/java/com/lingniu/ingest/vehiclestat/config/VehicleStatAutoConfigurationTest.java @@ -97,7 +97,7 @@ class VehicleStatAutoConfigurationTest { } @Test - void createsInMemoryJt808StateStoreOnlyWhenExplicitlySelected() { + void doesNotCreateJt808MileageBeansWhenMemoryStateStoreIsSelected() { contextRunner .withBean(JdbcTemplate.class, () -> mock(JdbcTemplate.class)) .withPropertyValues( @@ -105,10 +105,10 @@ class VehicleStatAutoConfigurationTest { "lingniu.ingest.vehicle-stat.jt808.enabled=true", "lingniu.ingest.vehicle-stat.jt808.state-store=memory") .run(context -> { - assertThat(context).hasSingleBean(Jt808MileageStateStore.class); + assertThat(context).doesNotHaveBean(Jt808MileageStateStore.class); assertThat(context).doesNotHaveBean(RedisJt808MileageStateStore.class); - assertThat(context).hasSingleBean(Jt808MileageStreamProcessor.class); - assertThat(context).hasSingleBean(VehicleStatEnvelopeIngestor.class); + assertThat(context).doesNotHaveBean(Jt808MileageStreamProcessor.class); + assertThat(context).doesNotHaveBean(VehicleStatEnvelopeIngestor.class); }); } @@ -123,13 +123,16 @@ class VehicleStatAutoConfigurationTest { "jdbc:h2:mem:vehicle_stat_auto;MODE=MySQL;DATABASE_TO_LOWER=TRUE;DB_CLOSE_DELAY=-1", "sa", "")) + .withBean(StringRedisTemplate.class, () -> mock(StringRedisTemplate.class)) + .withBean(ObjectMapper.class, ObjectMapper::new) .withPropertyValues( "lingniu.ingest.vehicle-stat.enabled=true", "lingniu.ingest.vehicle-stat.jt808.enabled=true", - "lingniu.ingest.vehicle-stat.jt808.state-store=memory") + "lingniu.ingest.vehicle-stat.jt808.state-store=redis") .run(context -> { assertThat(context).hasSingleBean(JdbcTemplate.class); assertThat(context).hasSingleBean(JdbcVehicleStatMetricRepository.class); + assertThat(context).hasSingleBean(RedisJt808MileageStateStore.class); assertThat(context).hasSingleBean(Jt808MileageStreamProcessor.class); assertThat(context).hasSingleBean(VehicleStatEnvelopeIngestor.class); assertThat(context).hasSingleBean(EnvelopeConsumerProcessor.class); diff --git a/modules/services/vehicle-stat-service/src/main/java/com/lingniu/ingest/vehiclestat/jt808/InMemoryJt808MileageStateStore.java b/modules/services/vehicle-stat-service/src/test/java/com/lingniu/ingest/vehiclestat/jt808/InMemoryJt808MileageStateStore.java similarity index 89% rename from modules/services/vehicle-stat-service/src/main/java/com/lingniu/ingest/vehiclestat/jt808/InMemoryJt808MileageStateStore.java rename to modules/services/vehicle-stat-service/src/test/java/com/lingniu/ingest/vehiclestat/jt808/InMemoryJt808MileageStateStore.java index f305e642..a6e0219d 100644 --- a/modules/services/vehicle-stat-service/src/main/java/com/lingniu/ingest/vehiclestat/jt808/InMemoryJt808MileageStateStore.java +++ b/modules/services/vehicle-stat-service/src/test/java/com/lingniu/ingest/vehiclestat/jt808/InMemoryJt808MileageStateStore.java @@ -5,7 +5,7 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; -public final class InMemoryJt808MileageStateStore implements Jt808MileageStateStore { +final class InMemoryJt808MileageStateStore implements Jt808MileageStateStore { private final Map states = new ConcurrentHashMap<>();