【代码评审】IoT:插件体系

This commit is contained in:
YunaiV 2025-01-26 17:55:04 +08:00
parent 7bfa830628
commit f4ad3e9d2d
4 changed files with 16 additions and 19 deletions

View File

@ -18,7 +18,6 @@ import java.time.Duration;
@AutoConfiguration
public class YudaoDeviceDataApiAutoConfiguration {
// TODO @haohao这个要不搞个配置类哈
@Value("${iot.device-data.url}")
private String deviceDataUrl;

View File

@ -20,8 +20,7 @@ public class HttpPluginSpringbootApplication {
ConfigurableApplicationContext context = application.run(args);
// 手动获取 VertxService 并启动
// TODO @haohao可以放在 bean init 里么
// 会和插件模式冲突
// TODO @haohao可以放在 bean init 里么回复会和插件模式冲突 @芋艿测试下
VertxService vertxService = context.getBean(VertxService.class);
vertxService.startServer();

View File

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.iot.plugin.http.config;
import cn.hutool.core.lang.Assert;
import cn.hutool.extra.spring.SpringUtil;
import cn.iocoder.yudao.module.iot.api.device.DeviceDataApi;
import lombok.extern.slf4j.Slf4j;
@ -21,62 +22,60 @@ public class HttpVertxPlugin extends SpringPlugin {
@Override
public void start() {
log.info("[HttpVertxPlugin][start][begin] 开始启动 HttpVertxPlugin 插件...");
log.info("[HttpVertxPlugin][HttpVertxPlugin 插件启动开始...]");
try {
// 1. 获取插件上下文
ApplicationContext pluginContext = getApplicationContext();
if (pluginContext == null) {
log.error("[HttpVertxPlugin][start][fail] pluginContext is null, 启动失败!");
return;
}
Assert.notNull(pluginContext, "pluginContext 不能为空");
// 2. 启动 Vert.x
VertxService vertxService = pluginContext.getBean(VertxService.class);
vertxService.startServer();
log.info("[HttpVertxPlugin][start][end] 启动完成");
log.info("[HttpVertxPlugin][HttpVertxPlugin 插件启动成功...]");
} catch (Exception e) {
log.error("[HttpVertxPlugin][start][exception] 启动过程出现异常!", e);
log.error("[HttpVertxPlugin][HttpVertxPlugin 插件开启动异常...]", e);
}
}
@Override
public void stop() {
log.info("[HttpVertxPlugin][stop][begin] 开始停止 HttpVertxPlugin 插件...");
log.info("[HttpVertxPlugin][HttpVertxPlugin 插件停止开始...]");
try {
// 停止服务器
ApplicationContext pluginContext = getApplicationContext();
if (pluginContext != null) {
// 停止服务器
VertxService vertxService = pluginContext.getBean(VertxService.class);
vertxService.stopServer();
}
log.info("[HttpVertxPlugin][stop][end] 停止完成");
log.info("[HttpVertxPlugin][HttpVertxPlugin 插件停止成功...]");
} catch (Exception e) {
log.error("[HttpVertxPlugin][stop][exception] 停止过程出现异常!", e);
log.error("[HttpVertxPlugin][HttpVertxPlugin 插件停止异常...]", e);
}
}
@Override
protected ApplicationContext createApplicationContext() {
// TODO @haohao这个加 deviceDataApi 的目的是啥呀
AnnotationConfigApplicationContext pluginContext = new AnnotationConfigApplicationContext() {
@Override
protected void prepareRefresh() {
// 在刷新容器前注册主程序中的 Bean
ConfigurableListableBeanFactory beanFactory = this.getBeanFactory();
DeviceDataApi deviceDataApi = SpringUtil.getBean(DeviceDataApi.class);
beanFactory.registerSingleton("deviceDataApi", deviceDataApi);
super.prepareRefresh();
}
};
pluginContext.setClassLoader(getWrapper().getPluginClassLoader());
// TODO @芋艿枚举
pluginContext.scan("cn.iocoder.yudao.module.iot.plugin.http.config");
pluginContext.refresh();
return pluginContext;
}
}