فهرست منبع

添加一个 SpringProperties, 用于读取 spring 配置文件中的某些配置值

reghao 2 سال پیش
والد
کامیت
c2f9aec6d0

+ 25 - 0
oss-store/src/main/java/cn/reghao/oss/store/config/DubboProperties.java

@@ -0,0 +1,25 @@
+package cn.reghao.oss.store.config;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author reghao
+ * @date 2024-02-23 12:54:20
+ */
+@Getter
+@Setter
+@Component
+@ConfigurationProperties(prefix = "dubbo")
+public class DubboProperties {
+    private Protocol protocol;
+
+    @Setter
+    @Getter
+    static class Protocol {
+        private String name;
+        private int port;
+    }
+}

+ 36 - 0
oss-store/src/main/java/cn/reghao/oss/store/config/SpringProperties.java

@@ -0,0 +1,36 @@
+package cn.reghao.oss.store.config;
+
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2024-02-23 12:58:00
+ */
+@Component
+public class SpringProperties {
+    private final ServerProperties serverProperties;
+    private final DubboProperties dubboProperties;
+    private final OssProperties ossProperties;
+
+    public SpringProperties(ServerProperties serverProperties, DubboProperties dubboProperties,
+                            OssProperties ossProperties) {
+        this.serverProperties = serverProperties;
+        this.dubboProperties = dubboProperties;
+        this.ossProperties = ossProperties;
+    }
+
+    public int getHttpPort() {
+        return serverProperties.getPort();
+    }
+
+    public int getRpcPort() {
+        return dubboProperties.getProtocol().getPort();
+    }
+
+    public List<String> getDiskDirs() {
+        return ossProperties.getDiskDirs();
+    }
+}

+ 118 - 0
oss-store/src/main/java/cn/reghao/oss/store/config/spring/AppLifecycle.java

@@ -0,0 +1,118 @@
+package cn.reghao.oss.store.config.spring;
+
+import cn.reghao.jutil.jdk.machine.id.MachineIdLinux;
+import cn.reghao.jutil.jdk.result.WebResult;
+import cn.reghao.jutil.jdk.serializer.JsonConverter;
+import cn.reghao.jutil.jdk.store.LocalStores;
+import cn.reghao.jutil.jdk.store.SubDirCount;
+import cn.reghao.oss.store.config.SpringProperties;
+import cn.reghao.oss.store.db.mapper.DataBlockMapper;
+import cn.reghao.oss.store.task.FileTask;
+import com.google.gson.reflect.TypeToken;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.DisposableBean;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Type;
+import java.net.URI;
+import java.net.http.HttpClient;
+import java.net.http.HttpRequest;
+import java.net.http.HttpResponse;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2022-03-23 09:22:01
+ */
+@Slf4j
+@Component
+public class AppLifecycle implements ApplicationRunner, DisposableBean {
+    private final DataBlockMapper dataBlockMapper;
+    private final FileTask fileTask;
+    private final SpringProperties springProperties;
+
+    public AppLifecycle(DataBlockMapper dataBlockMapper, FileTask fileTask, SpringProperties springProperties) {
+        this.dataBlockMapper = dataBlockMapper;
+        this.fileTask = fileTask;
+        this.springProperties = springProperties;
+    }
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        register();
+        initLocalStore();
+
+        log.info("执行文件任务...");
+        fileTask.exec();
+        log.info("文件任务执行完成...");
+    }
+
+    private void initLocalStore() throws IOException {
+        log.info("初始化本地磁盘...");
+        List<String> diskDirs = springProperties.getDiskDirs();
+        for (String diskDir : diskDirs) {
+            File dir = new File(diskDir);
+            if (!dir.exists()) {
+                dir.mkdirs();
+            }
+        }
+        LocalStores.init(diskDirs);
+
+        for (String diskDir : diskDirs) {
+            List<SubDirCount> list = dataBlockMapper.findSubDirCount("");
+            Map<String, Integer> map = new HashMap<>();
+            list.forEach(subDirCount -> {
+                String relativeDir = subDirCount.getRelativeDir();
+                String storeDir = diskDir + relativeDir;
+                File file = new File(storeDir);
+
+                int total = subDirCount.getTotal();
+                map.put(file.getAbsolutePath(), total);
+            });
+
+            LocalStores.initStoreDirs(diskDir, map);
+        }
+        log.info("本地磁盘数据初始化完成...");
+    }
+
+    private void register() throws Exception {
+        Map<String, String> map = new HashMap<>();
+        map.put("ipv4Addr", new MachineIdLinux().ipv4());
+        map.put("httpPort", springProperties.getHttpPort()+"");
+        map.put("rpcPort", springProperties.getRpcPort()+"");
+        String jsonPayload = JsonConverter.objectToJson(map);
+
+        String endpoint = "http://ossweb.reghao.cn";
+        String api = String.format("%s/api/oss/store/node", endpoint);
+
+        HttpClient httpClient = HttpClient.newBuilder().build();
+        HttpRequest httpRequest = HttpRequest.newBuilder(new URI(api))
+                .header("content-type", "application/json")
+                .POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
+                .build();
+        HttpResponse<String> httpResponse = httpClient.send(httpRequest, HttpResponse.BodyHandlers.ofString());
+        int statusCode = httpResponse.statusCode();
+        String body = httpResponse.body();
+        if (statusCode != 200) {
+            String errMsg = String.format("%s -> %s", statusCode, body);
+            throw new Exception(errMsg);
+        }
+
+        Type type = new TypeToken<WebResult<String>>(){}.getType();
+        WebResult<String> webResult = JsonConverter.jsonToObject(body, type);
+        if (webResult.getCode() != 0) {
+            String errMsg = String.format("%s - %s", webResult.getCode(), webResult.getMsg());
+            throw new Exception(errMsg);
+        }
+    }
+
+    @Override
+    public void destroy() {
+    }
+}

+ 0 - 77
oss-store/src/main/java/cn/reghao/oss/store/config/spring/FileLifecycle.java

@@ -1,77 +0,0 @@
-package cn.reghao.oss.store.config.spring;
-
-import cn.reghao.jutil.jdk.store.LocalStores;
-import cn.reghao.jutil.jdk.store.SubDirCount;
-import cn.reghao.oss.store.config.OssProperties;
-import cn.reghao.oss.store.db.mapper.DataBlockMapper;
-import cn.reghao.oss.store.task.FileTask;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.stereotype.Component;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author reghao
- * @date 2022-03-23 09:22:01
- */
-@Slf4j
-@Component
-public class FileLifecycle implements ApplicationRunner, DisposableBean {
-    private final OssProperties ossProperties;
-    private final DataBlockMapper dataBlockMapper;
-    private final FileTask fileTask;
-
-    public FileLifecycle(OssProperties ossProperties, DataBlockMapper dataBlockMapper, FileTask fileTask) {
-        this.ossProperties = ossProperties;
-        this.dataBlockMapper = dataBlockMapper;
-        this.fileTask = fileTask;
-    }
-
-    @Override
-    public void run(ApplicationArguments args) throws Exception {
-        initLocalStore();
-
-        log.info("执行文件任务...");
-        fileTask.exec();
-        log.info("文件任务执行完成...");
-    }
-
-    private void initLocalStore() throws IOException {
-        log.info("初始化本地磁盘...");
-        List<String> diskDirs = ossProperties.getDiskDirs();
-        for (String diskDir : diskDirs) {
-            File dir = new File(diskDir);
-            if (!dir.exists()) {
-                dir.mkdirs();
-            }
-        }
-        LocalStores.init(diskDirs);
-
-        for (String diskDir : diskDirs) {
-            List<SubDirCount> list = dataBlockMapper.findSubDirCount("");
-            Map<String, Integer> map = new HashMap<>();
-            list.forEach(subDirCount -> {
-                String relativeDir = subDirCount.getRelativeDir();
-                String storeDir = diskDir + relativeDir;
-                File file = new File(storeDir);
-
-                int total = subDirCount.getTotal();
-                map.put(file.getAbsolutePath(), total);
-            });
-
-            LocalStores.initStoreDirs(diskDir, map);
-        }
-        log.info("本地磁盘数据初始化完成...");
-    }
-
-    @Override
-    public void destroy() {
-    }
-}