Sfoglia il codice sorgente

refactor(P1): 字段注入→构造函数注入,扩展配置校验

- VehicleSyncTask: 10个@Autowired字段改为final+构造函数注入
- MqttGenericConsumer: 3个@Autowired字段改为构造函数参数
- IotProperties: validate()新增brokerUrl和url空值校验
- MqttGenericConsumerTest: 更新匹配4参数构造函数
mqy20260511
humanleft 4 giorni fa
parent
commit
7753e41899

+ 2
- 0
iot-platform/src/main/java/com/iot/platform/config/IotProperties.java Vedi File

@@ -20,8 +20,10 @@ public class IotProperties {
20 20
     @PostConstruct
21 21
     public void validate() {
22 22
         List<String> errors = new ArrayList<>();
23
+        if (isBlank(mqtt.getBrokerUrl())) errors.add("iot.mqtt.broker-url 不能为空");
23 24
         if (isBlank(mqtt.getUsername())) errors.add("iot.mqtt.username 不能为空");
24 25
         if (isBlank(mqtt.getPassword())) errors.add("iot.mqtt.password 不能为空");
26
+        if (isBlank(tdengine.getUrl())) errors.add("iot.tdengine.url 不能为空");
25 27
         if (isBlank(tdengine.getUsername())) errors.add("iot.tdengine.username 不能为空");
26 28
         if (isBlank(tdengine.getPassword())) errors.add("iot.tdengine.password 不能为空");
27 29
         if (!errors.isEmpty()) {

+ 10
- 7
iot-platform/src/main/java/com/iot/platform/mqtt/MqttGenericConsumer.java Vedi File

@@ -21,18 +21,21 @@ import java.util.concurrent.ExecutorService;
21 21
 @Component
22 22
 public class MqttGenericConsumer extends AbstractMqttConsumer {
23 23
 
24
-    @Autowired
25
-    private StringRedisTemplate stringRedisTemplate;
26
-    @Autowired
27
-    public SysControllerService sysControllerService;
28
-    @Autowired
29
-    public MqttDynamicConsumer messageListenerService2;
24
+    private final StringRedisTemplate stringRedisTemplate;
25
+    private final SysControllerService sysControllerService;
26
+    private final MqttDynamicConsumer messageListenerService2;
30 27
 
31 28
     private final ObjectMapper objectMapper = new ObjectMapper();
32 29
 
33 30
     @Autowired
34
-    public MqttGenericConsumer(@Qualifier("abstractConsumerExecutor") ExecutorService executorService) {
31
+    public MqttGenericConsumer(@Qualifier("abstractConsumerExecutor") ExecutorService executorService,
32
+                               StringRedisTemplate stringRedisTemplate,
33
+                               SysControllerService sysControllerService,
34
+                               MqttDynamicConsumer messageListenerService2) {
35 35
         super(executorService);
36
+        this.stringRedisTemplate = stringRedisTemplate;
37
+        this.sysControllerService = sysControllerService;
38
+        this.messageListenerService2 = messageListenerService2;
36 39
     }
37 40
 
38 41
     @Override

+ 32
- 19
iot-platform/src/main/java/com/iot/platform/task/VehicleSyncTask.java Vedi File

@@ -28,26 +28,39 @@ public class VehicleSyncTask {
28 28
 
29 29
     private static final Logger log = LoggerFactory.getLogger(VehicleSyncTask.class);
30 30
 
31
+    private final SysCarService sysCarService;
32
+    private final SysDeviceService sysDeviceService;
33
+    private final StringRedisTemplate stringRedisTemplate;
34
+    private final SysrealtimeService sysrealtimeService;
35
+    private final SysDeviceVoService sysDeviceVoService;
36
+    private final SysDeviceControlService sysDeviceControlService;
37
+    private final SysWorkorderService sysWorkorderService;
38
+    private final SysIndicatorsService sysIndicatorsService;
39
+    private final SysCompanyService sysCompanyService;
40
+    private final RestTemplate restTemplate;
41
+
31 42
     @Autowired
32
-    public SysCarService sysCarService;
33
-    @Autowired
34
-    public SysDeviceService sysDeviceService;
35
-    @Autowired
36
-    private StringRedisTemplate stringRedisTemplate;
37
-    @Autowired
38
-    private SysrealtimeService sysrealtimeService;
39
-    @Autowired
40
-    public SysDeviceVoService sysDeviceVoService;
41
-    @Autowired
42
-    public SysDeviceControlService sysDeviceControlService;
43
-    @Autowired
44
-    public SysWorkorderService sysWorkorderService;
45
-    @Autowired
46
-    public SysIndicatorsService sysIndicatorsService;
47
-    @Autowired
48
-    public SysCompanyService sysCompanyService;
49
-    @Autowired
50
-    private RestTemplate restTemplate;
43
+    public VehicleSyncTask(SysCarService sysCarService,
44
+                           SysDeviceService sysDeviceService,
45
+                           StringRedisTemplate stringRedisTemplate,
46
+                           SysrealtimeService sysrealtimeService,
47
+                           SysDeviceVoService sysDeviceVoService,
48
+                           SysDeviceControlService sysDeviceControlService,
49
+                           SysWorkorderService sysWorkorderService,
50
+                           SysIndicatorsService sysIndicatorsService,
51
+                           SysCompanyService sysCompanyService,
52
+                           RestTemplate restTemplate) {
53
+        this.sysCarService = sysCarService;
54
+        this.sysDeviceService = sysDeviceService;
55
+        this.stringRedisTemplate = stringRedisTemplate;
56
+        this.sysrealtimeService = sysrealtimeService;
57
+        this.sysDeviceVoService = sysDeviceVoService;
58
+        this.sysDeviceControlService = sysDeviceControlService;
59
+        this.sysWorkorderService = sysWorkorderService;
60
+        this.sysIndicatorsService = sysIndicatorsService;
61
+        this.sysCompanyService = sysCompanyService;
62
+        this.restTemplate = restTemplate;
63
+    }
51 64
 
52 65
     private boolean tryLock(String lockKey, long expireSeconds) {
53 66
         Boolean acquired = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, "1", expireSeconds, TimeUnit.SECONDS);

+ 12
- 2
iot-platform/src/test/java/com/iot/platform/mqtt/MqttGenericConsumerTest.java Vedi File

@@ -1,28 +1,38 @@
1 1
 package com.iot.platform.mqtt;
2 2
 
3
+import com.iot.platform.service.SysControllerService;
3 4
 import org.junit.jupiter.api.DisplayName;
4 5
 import org.junit.jupiter.api.Test;
6
+import org.springframework.data.redis.core.StringRedisTemplate;
5 7
 
6 8
 import java.util.concurrent.ExecutorService;
7 9
 import java.util.concurrent.Executors;
8 10
 
9 11
 import static org.assertj.core.api.Assertions.assertThat;
12
+import static org.mockito.Mockito.mock;
10 13
 
11 14
 class MqttGenericConsumerTest {
12 15
 
13 16
     private final ExecutorService executorService = Executors.newSingleThreadExecutor();
17
+    private final StringRedisTemplate stringRedisTemplate = mock(StringRedisTemplate.class);
18
+    private final SysControllerService sysControllerService = mock(SysControllerService.class);
19
+    private final MqttDynamicConsumer mqttDynamicConsumer = mock(MqttDynamicConsumer.class);
20
+
21
+    private MqttGenericConsumer createConsumer() {
22
+        return new MqttGenericConsumer(executorService, stringRedisTemplate, sysControllerService, mqttDynamicConsumer);
23
+    }
14 24
 
15 25
     @Test
16 26
     @DisplayName("getSubscribeTopic 应返回 +/generics")
17 27
     void getSubscribeTopic_returnsCorrectValue() {
18
-        MqttGenericConsumer consumer = new MqttGenericConsumer(executorService);
28
+        MqttGenericConsumer consumer = createConsumer();
19 29
         assertThat(consumer.getSubscribeTopic()).isEqualTo("+/generics");
20 30
     }
21 31
 
22 32
     @Test
23 33
     @DisplayName("generateClientId 应包含 mqttx 前缀")
24 34
     void generateClientId_containsPrefix() {
25
-        MqttGenericConsumer consumer = new MqttGenericConsumer(executorService);
35
+        MqttGenericConsumer consumer = createConsumer();
26 36
         String clientId = consumer.generateClientId();
27 37
         assertThat(clientId).startsWith("mqttx_e216fbf16");
28 38
     }

Loading…
Annulla
Salva