refactor: require redis for jt808 mileage state
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
package com.lingniu.ingest.analyticsapp;
|
package com.lingniu.ingest.analyticsapp;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.lingniu.ingest.api.consumer.EnvelopeConsumerProcessor;
|
import com.lingniu.ingest.api.consumer.EnvelopeConsumerProcessor;
|
||||||
import com.lingniu.ingest.sink.mq.KafkaEnvelopeDeadLetterSink;
|
import com.lingniu.ingest.sink.mq.KafkaEnvelopeDeadLetterSink;
|
||||||
import com.lingniu.ingest.sink.mq.KafkaEventSink;
|
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.autoconfigure.AutoConfigurations;
|
||||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||||
import org.springframework.jdbc.core.JdbcTemplate;
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
import org.springframework.util.ClassUtils;
|
import org.springframework.util.ClassUtils;
|
||||||
|
|
||||||
@@ -35,6 +37,8 @@ class VehicleAnalyticsAppCompositionTest {
|
|||||||
.withAllowBeanDefinitionOverriding(true)
|
.withAllowBeanDefinitionOverriding(true)
|
||||||
.withBean("kafkaProducer", KafkaProducer.class, VehicleAnalyticsAppCompositionTest::kafkaProducer)
|
.withBean("kafkaProducer", KafkaProducer.class, VehicleAnalyticsAppCompositionTest::kafkaProducer)
|
||||||
.withBean(JdbcTemplate.class, () -> mock(JdbcTemplate.class))
|
.withBean(JdbcTemplate.class, () -> mock(JdbcTemplate.class))
|
||||||
|
.withBean(StringRedisTemplate.class, () -> mock(StringRedisTemplate.class))
|
||||||
|
.withBean(ObjectMapper.class, ObjectMapper::new)
|
||||||
.withPropertyValues(
|
.withPropertyValues(
|
||||||
"lingniu.ingest.sink.mq.enabled=true",
|
"lingniu.ingest.sink.mq.enabled=true",
|
||||||
"lingniu.ingest.sink.mq.type=kafka",
|
"lingniu.ingest.sink.mq.type=kafka",
|
||||||
@@ -43,7 +47,7 @@ class VehicleAnalyticsAppCompositionTest {
|
|||||||
"lingniu.ingest.vehicle-state.enabled=false",
|
"lingniu.ingest.vehicle-state.enabled=false",
|
||||||
"lingniu.ingest.vehicle-stat.enabled=true",
|
"lingniu.ingest.vehicle-stat.enabled=true",
|
||||||
"lingniu.ingest.vehicle-stat.jt808.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-file-store.enabled=false",
|
||||||
"lingniu.ingest.event-history.enabled=false",
|
"lingniu.ingest.event-history.enabled=false",
|
||||||
"lingniu.ingest.gb32960.enabled=false")
|
"lingniu.ingest.gb32960.enabled=false")
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import com.lingniu.ingest.vehiclestat.JdbcVehicleStatMetricRepository;
|
|||||||
import com.lingniu.ingest.vehiclestat.VehicleStatController;
|
import com.lingniu.ingest.vehiclestat.VehicleStatController;
|
||||||
import com.lingniu.ingest.vehiclestat.VehicleStatEnvelopeIngestor;
|
import com.lingniu.ingest.vehiclestat.VehicleStatEnvelopeIngestor;
|
||||||
import com.lingniu.ingest.vehiclestat.VehicleStatRepository;
|
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.Jt808LocationPointExtractor;
|
||||||
import com.lingniu.ingest.vehiclestat.jt808.Jt808MileageStateStore;
|
import com.lingniu.ingest.vehiclestat.jt808.Jt808MileageStateStore;
|
||||||
import com.lingniu.ingest.vehiclestat.jt808.Jt808MileageStreamProcessor;
|
import com.lingniu.ingest.vehiclestat.jt808.Jt808MileageStreamProcessor;
|
||||||
@@ -63,14 +62,6 @@ public class VehicleStatAutoConfiguration {
|
|||||||
jt808.getRedisKeyPrefix(), Duration.ofDays(jt808.getStateTtlDays()));
|
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
|
@Bean
|
||||||
@ConditionalOnBean({Jt808LocationPointExtractor.class, Jt808MileageStateStore.class,
|
@ConditionalOnBean({Jt808LocationPointExtractor.class, Jt808MileageStateStore.class,
|
||||||
VehicleStatRepository.class})
|
VehicleStatRepository.class})
|
||||||
|
|||||||
@@ -97,7 +97,7 @@ class VehicleStatAutoConfigurationTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void createsInMemoryJt808StateStoreOnlyWhenExplicitlySelected() {
|
void doesNotCreateJt808MileageBeansWhenMemoryStateStoreIsSelected() {
|
||||||
contextRunner
|
contextRunner
|
||||||
.withBean(JdbcTemplate.class, () -> mock(JdbcTemplate.class))
|
.withBean(JdbcTemplate.class, () -> mock(JdbcTemplate.class))
|
||||||
.withPropertyValues(
|
.withPropertyValues(
|
||||||
@@ -105,10 +105,10 @@ class VehicleStatAutoConfigurationTest {
|
|||||||
"lingniu.ingest.vehicle-stat.jt808.enabled=true",
|
"lingniu.ingest.vehicle-stat.jt808.enabled=true",
|
||||||
"lingniu.ingest.vehicle-stat.jt808.state-store=memory")
|
"lingniu.ingest.vehicle-stat.jt808.state-store=memory")
|
||||||
.run(context -> {
|
.run(context -> {
|
||||||
assertThat(context).hasSingleBean(Jt808MileageStateStore.class);
|
assertThat(context).doesNotHaveBean(Jt808MileageStateStore.class);
|
||||||
assertThat(context).doesNotHaveBean(RedisJt808MileageStateStore.class);
|
assertThat(context).doesNotHaveBean(RedisJt808MileageStateStore.class);
|
||||||
assertThat(context).hasSingleBean(Jt808MileageStreamProcessor.class);
|
assertThat(context).doesNotHaveBean(Jt808MileageStreamProcessor.class);
|
||||||
assertThat(context).hasSingleBean(VehicleStatEnvelopeIngestor.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",
|
"jdbc:h2:mem:vehicle_stat_auto;MODE=MySQL;DATABASE_TO_LOWER=TRUE;DB_CLOSE_DELAY=-1",
|
||||||
"sa",
|
"sa",
|
||||||
""))
|
""))
|
||||||
|
.withBean(StringRedisTemplate.class, () -> mock(StringRedisTemplate.class))
|
||||||
|
.withBean(ObjectMapper.class, ObjectMapper::new)
|
||||||
.withPropertyValues(
|
.withPropertyValues(
|
||||||
"lingniu.ingest.vehicle-stat.enabled=true",
|
"lingniu.ingest.vehicle-stat.enabled=true",
|
||||||
"lingniu.ingest.vehicle-stat.jt808.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 -> {
|
.run(context -> {
|
||||||
assertThat(context).hasSingleBean(JdbcTemplate.class);
|
assertThat(context).hasSingleBean(JdbcTemplate.class);
|
||||||
assertThat(context).hasSingleBean(JdbcVehicleStatMetricRepository.class);
|
assertThat(context).hasSingleBean(JdbcVehicleStatMetricRepository.class);
|
||||||
|
assertThat(context).hasSingleBean(RedisJt808MileageStateStore.class);
|
||||||
assertThat(context).hasSingleBean(Jt808MileageStreamProcessor.class);
|
assertThat(context).hasSingleBean(Jt808MileageStreamProcessor.class);
|
||||||
assertThat(context).hasSingleBean(VehicleStatEnvelopeIngestor.class);
|
assertThat(context).hasSingleBean(VehicleStatEnvelopeIngestor.class);
|
||||||
assertThat(context).hasSingleBean(EnvelopeConsumerProcessor.class);
|
assertThat(context).hasSingleBean(EnvelopeConsumerProcessor.class);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import java.util.Map;
|
|||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public final class InMemoryJt808MileageStateStore implements Jt808MileageStateStore {
|
final class InMemoryJt808MileageStateStore implements Jt808MileageStateStore {
|
||||||
|
|
||||||
private final Map<String, Jt808DailyMileageState> states = new ConcurrentHashMap<>();
|
private final Map<String, Jt808DailyMileageState> states = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
Reference in New Issue
Block a user