From aea81128444acb8ca9a90bc7ef04758bf2cd284d Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 周三, 23 8月 2023 14:44:22 +0800
Subject: [PATCH] 重构minio和mqtt配置信息获取 重构minio工具类 区分生产环境和开发环境配置信息

---
 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java                          |   33 +
 ruoyi-admin/src/main/resources/application-prod-druid.yml                              |   58 +++
 ard-work/src/main/resources/templates/test.html                                        |    2 
 ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java                  |   75 +++
 ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java                          |   53 +-
 ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java                   |  157 ++++---
 ruoyi-admin/src/main/resources/application.yml                                         |  131 ++----
 /dev/null                                                                              |   61 ---
 ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java                        |    7 
 ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java |    5 
 ruoyi-admin/src/main/resources/application-prod.yml                                    |  101 +++++
 ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java  |   20 
 ruoyi-admin/src/main/resources/application-dev-druid.yml                               |   58 +++
 ard-work/src/main/java/com/ruoyi/utils/spring/SpringUtils.java                         |  158 ++++++++
 ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java                 |    4 
 ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java |   15 
 ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java              |   41 +-
 ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java                  |    4 
 ruoyi-admin/src/main/resources/application-dev.yml                                     |  101 +++++
 19 files changed, 775 insertions(+), 309 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
index c594b93..6c2d3a8 100644
--- a/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
+++ b/ard-work/src/main/java/com/ruoyi/app/position/controller/ArdAppPositionController.java
@@ -46,7 +46,8 @@
     private IArdAppPositionService ardAppPositionService;
     @Autowired
     private ISysUserService sysUserService;
-
+    @Autowired
+    private MinioUtils minioUtil;
 
     /**
      * 查询app位置列表
@@ -200,7 +201,7 @@
     @ApiOperation("上传文件")
     public AjaxResult uploadFile(MultipartFile file,String type)
     {
-        String url = MinioUtils.putObjectAndGetUrl("app",type, file);
+        String url = minioUtil.putObjectAndGetUrl("app",type, file);
         return AjaxResult.success(url);
     }
 }
diff --git a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
index fd602a2..af4c67b 100644
--- a/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/camera/service/impl/ArdCamerasServiceImpl.java
@@ -120,20 +120,7 @@
         ardCameras.setCreateTime(DateUtils.getNowDate());
         ardCameras.setUserId(SecurityUtils.getUserId());
         redisCache.setCacheObject(getCacheKey(ardCameras.getId()), ardCameras);
-        int i = ardCamerasMapper.insertArdCameras(ardCameras);
-        if (i > 0) {
-//            //删除当前相机的所有通道
-//            ardChannelMapper.deleteArdChannelByDeviceId(ardCameras.getId());
-//            //获取相机通道
-//            List<ArdChannel> ipChannelList = hikClientService.getCameraChannelList(ardCameras);
-//            if (ipChannelList.size() > 0) {
-//                for (ArdChannel channel : ipChannelList) {
-//                    channel.setId(IdUtils.simpleUUID());
-//                    ardChannelMapper.insertArdChannel(channel);
-//                }
-//            }
-        }
-        return i;
+        return ardCamerasMapper.insertArdCameras(ardCameras);
     }
 
     /**
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/config/MinioClientSingleton.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/config/MinioClientSingleton.java
deleted file mode 100644
index 7433fed..0000000
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/config/MinioClientSingleton.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.ruoyi.device.hiksdk.config;
-
-import io.minio.MinioClient;
-import lombok.Data;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-
-import java.io.IOException;
-import java.util.Properties;
-
-/**
- * @Description:
- * @ClassName: MinioClientSingleton
- * @Author: 刘苏义
- * @Date: 2023年05月18日9:32
- * @Version: 1.0
- **/
-
-@Slf4j(topic = "minio")
-@Component
-public class MinioClientSingleton {
-
-    public static String domainUrl;
-    private static String accessKey;
-    private static String secretKey;
-
-    private volatile static MinioClient minioClient;
-
-    static {
-        domainUrl = getYmlNew("minio.endpoint");
-        accessKey = getYmlNew("minio.accessKey");
-        secretKey = getYmlNew("minio.secretKey");
-        log.debug("minio信息:" + domainUrl + "(" + accessKey + "/" + secretKey + ")");
-    }
-
-    /**
-     * 获取minio客户端实例
-     *
-     * @return {@link MinioClient}
-     */
-    public static MinioClient getMinioClient() {
-        if (minioClient == null) {
-            synchronized (MinioClientSingleton.class) {
-                if (minioClient == null) {
-                    minioClient = MinioClient.builder()
-                            .endpoint(domainUrl)
-                            .credentials(accessKey, secretKey)
-                            .build();
-                }
-            }
-        }
-        return minioClient;
-    }
-
-    /*yml配置信息获取*/
-    public static String getYmlNew(String key) {
-        Resource resource = new ClassPathResource("application-ard.yml");
-        Properties properties = null;
-        try {
-            YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
-            yamlFactory.setResources(resource);
-            properties = yamlFactory.getObject();
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-        return properties.get(key).toString();
-    }
-
-}
-
diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
index 1471f3a..771c21f 100644
--- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/service/impl/HikClientServiceImpl.java
@@ -1,16 +1,13 @@
 package com.ruoyi.device.hiksdk.service.impl;
 
-import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.annotation.SdkOperate;
 import com.ruoyi.common.utils.file.FileUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
 import com.ruoyi.device.camera.domain.CameraCmd;
 import com.ruoyi.device.camera.service.IArdCamerasService;
 import com.ruoyi.device.channel.domain.ArdChannel;
-import com.ruoyi.device.channel.service.IArdChannelService;
 import com.ruoyi.device.hiksdk.common.GlobalVariable;
 import com.ruoyi.device.camera.domain.ArdCameras;
-import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
 import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil;
 import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK;
 import com.ruoyi.device.hiksdk.service.IHikClientService;
@@ -22,7 +19,7 @@
 import com.sun.jna.Pointer;
 import com.sun.jna.ptr.IntByReference;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.scheduling.annotation.Async;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
 import java.util.Base64;
@@ -33,7 +30,6 @@
 import java.text.DecimalFormat;
 import java.text.SimpleDateFormat;
 import java.util.*;
-import java.util.stream.Collectors;
 
 import static com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK.*;
 
@@ -48,8 +44,12 @@
 @Service
 public class HikClientServiceImpl implements IHikClientService {
 
+    @Value("${minio.endpoint}")
+    private static String endpoint;
     @Resource
-    IArdCamerasService ardCamerasService;
+    private IArdCamerasService ardCamerasService;
+    @Resource
+    private MinioUtils minioUtil;
 
     private static HCNetSDK hCNetSDK;
 
@@ -1155,9 +1155,9 @@
             InputStream input = new ByteArrayInputStream(array);
             String url = "";
             try {
-                boolean b = MinioUtils.uploadObject(BucketName, ObjectName, input, input.available(), ContentType);
+                boolean b = minioUtil.uploadObject(BucketName, ObjectName, input, input.available(), ContentType);
                 if (b) {
-                    url = MinioUtils.getBucketObjectUrl(BucketName, ObjectName);
+                    url = minioUtil.getBucketObjectUrl(BucketName, ObjectName);
                     log.debug("上传文件成功!" + url);
                 }
             } catch (IOException ex) {
@@ -1341,9 +1341,9 @@
             FileInputStream stream = new FileInputStream(path);
             String time = new SimpleDateFormat("yyyyMMdd").format(new Date());
             String recordName = cameraId + "/" + time + "/" + ObjectName + ".mp4";
-            boolean b = MinioUtils.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
+            boolean b = minioUtil.uploadObject(BucketName, recordName, stream, stream.available(), ContentType);
             if (b) {
-                url = MinioClientSingleton.domainUrl + "/" + BucketName + "/" + recordName;
+                url = endpoint + "/" + BucketName + "/" + recordName;
                 log.debug("上传文件成功!" + url);
             }
             return url;
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java
index e8b45ba..36eede2 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java
@@ -47,8 +47,8 @@
                 // 启动后台进程
                 CmdUtils.commandStart(processName, cmd, null);
                 // 启动cmd窗口
-//            String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
-//            CmdUtils.commandStart(command);
+//                String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
+//                CmdUtils.commandStart(command);
             }
         }
     }
diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java
new file mode 100644
index 0000000..2a3989f
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioConfig.java
@@ -0,0 +1,75 @@
+package com.ruoyi.storage.minio.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:
+ * @ClassName: MinioClientSingleton
+ * @Author: 刘苏义
+ * @Date: 2023年05月18日9:32
+ * @Version: 1.0
+ **/
+@Slf4j(topic = "minio")
+@Component
+public class MinioConfig {
+    @Value("${minio.endpoint}")
+    private  String endpoint;
+    @Value("${minio.accessKey}")
+    private  String accessKey;
+    @Value("${minio.secretKey}")
+    private  String secretKey;
+
+//    private volatile static MinioClient minioClient;
+
+    @Bean
+    public io.minio.MinioClient getMinioClient() {
+        return io.minio.MinioClient.builder()
+                .endpoint(endpoint)
+                .credentials(accessKey, secretKey)
+                .build();
+    }
+
+//    /**
+//     * 获取minio客户端实例
+//     *
+//     * @return {@link MinioClient}
+//     */
+//    public static MinioClient getMinioClient() {
+//        if (minioClient == null) {
+//            synchronized (MinioClientSingleton.class) {
+//                if (minioClient == null) {
+//                    minioClient = MinioClient.builder()
+//                            .endpoint(endpoint)
+//                            .credentials(accessKey, secretKey)
+//                            .build();
+//                }
+//            }
+//        }
+//        return minioClient;
+//    }
+    //    static {
+//        domainUrl = getYmlNew("minio.endpoint");
+//        accessKey = getYmlNew("minio.accessKey");
+//        secretKey = getYmlNew("minio.secretKey");
+//        log.debug("minio信息:" + domainUrl + "(" + accessKey + "/" + secretKey + ")");
+//    }
+    /*yml配置信息获取*/
+//    public static String getYmlNew(String key) {
+//        Resource resource = new ClassPathResource("application-prod.yml");
+//        Properties properties = null;
+//        try {
+//            YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
+//            yamlFactory.setResources(resource);
+//            properties = yamlFactory.getObject();
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            return null;
+//        }
+//        return properties.get(key).toString();
+//    }
+
+}
+
diff --git a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
index c063b73..ff3e870 100644
--- a/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
+++ b/ard-work/src/main/java/com/ruoyi/storage/minio/utils/MinioUtils.java
@@ -2,13 +2,14 @@
 
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
 import io.minio.*;
 import io.minio.http.Method;
 import io.minio.messages.*;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.annotation.Resource;
 import java.io.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -22,19 +23,23 @@
  **/
 @SuppressWarnings("ALL")
 @Slf4j(topic = "minio")
+@Component
 public class MinioUtils {
+
+    @Resource
+    MinioClient minioClient;
 
     /**
      * 判断桶是否存在
      */
-    public static boolean exitsBucket(String bucketName) {
+    public boolean exitsBucket(String bucketName) {
         boolean found = false;
         try {
             if (StringUtils.isEmpty(bucketName)) {
                 return false;
             }
             BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
-            found = MinioClientSingleton.getMinioClient().bucketExists(bucketExistsArgs);
+            found = minioClient.bucketExists(bucketExistsArgs);
 
         } catch (Exception ex) {
             log.error("minio判断桶存在异常:", ex.getMessage());
@@ -45,14 +50,14 @@
     /**
      * 创建桶,并设置桶策略为公共
      */
-    public static boolean createBucket(String bucketName) {
+    public boolean createBucket(String bucketName) {
         try {
             if (StringUtils.isEmpty(bucketName)) {
                 return false;
             }
             /*创建桶*/
             MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
-            MinioClientSingleton.getMinioClient().makeBucket(makeBucketArgs);
+            minioClient.makeBucket(makeBucketArgs);
             /*设置策略*/
             String sb = "{\"Version\":\"2012-10-17\"," +
                     "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" +
@@ -72,7 +77,7 @@
             queueConfiguration.setQueue("arn:minio:sqs::_:mqtt");
 
             //设置事件
-            List<EventType> events=new ArrayList<>();
+            List<EventType> events = new ArrayList<>();
             events.add(EventType.OBJECT_REMOVED_ANY);
             events.add(EventType.OBJECT_CREATED_ANY);
             queueConfiguration.setEvents(events);
@@ -82,8 +87,8 @@
             SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder()
                     .bucket(bucketName)
                     .config(config).build();
-            MinioClientSingleton.getMinioClient().setBucketPolicy(setBucketPolicyArgs);
-            MinioClientSingleton.getMinioClient().setBucketNotification(setBucketNotificationArgs);
+            minioClient.setBucketPolicy(setBucketPolicyArgs);
+            minioClient.setBucketNotification(setBucketNotificationArgs);
 
             return true;
         } catch (Exception ex) {
@@ -97,11 +102,11 @@
      *
      * @param bucket 桶名称
      */
-    public static boolean removeBucket(String bucket) {
+    public boolean removeBucket(String bucket) {
         try {
             boolean found = exitsBucket(bucket);
             if (found) {
-                Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder().bucket(bucket).build());
+                Iterable<Result<Item>> myObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucket).build());
                 for (Result<Item> result : myObjects) {
                     Item item = result.get();
                     //有对象文件,则删除失败
@@ -110,7 +115,7 @@
                     }
                 }
                 // 删除`bucketName`存储桶,注意,只有存储桶为空时才能删除成功。
-                MinioClientSingleton.getMinioClient().removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());
+                minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());
                 found = exitsBucket(bucket);
                 return !found;
             }
@@ -125,9 +130,9 @@
      *
      * @return
      */
-    public static List<Bucket> getListBuckets() {
+    public List<Bucket> getListBuckets() {
         try {
-            return MinioClientSingleton.getMinioClient().listBuckets();
+            return minioClient.listBuckets();
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -143,7 +148,7 @@
      * @param expires    失效时间(以秒为单位),默认是7天,不得大于七天
      * @return
      */
-    public static String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
+    public String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
         String url = "";
         if (exitsBucket(bucketName)) {
             try {
@@ -153,7 +158,7 @@
                         .object(objectName)
                         .expiry(expires, timeUnit)
                         .build();
-                url = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+                url = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
             } catch (Exception ex) {
                 log.error("minio生成失效url异常", ex.getMessage());
             }
@@ -171,7 +176,7 @@
      * @创建时间 2023/5/18 12:16
      * @修改人和其它信息
      */
-    public static String putObjectAndGetUrl(String bucketName, MultipartFile file) {
+    public String putObjectAndGetUrl(String bucketName, MultipartFile file) {
         if (!exitsBucket(bucketName)) {
             createBucket(bucketName);
         }
@@ -200,7 +205,7 @@
                     .stream(inputStream, file.getSize(), -1)
                     .contentType(file.getContentType())
                     .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            minioClient.putObject(putObjectArgs);
             inputStream.close();
             /*获取url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
@@ -209,7 +214,7 @@
                     .object(fileName)
                     .method(Method.GET)
                     .build();
-            String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
             String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
             return ObjectUrl;
         } catch (Exception ex) {
@@ -226,7 +231,7 @@
      * @创建时间 2023/5/18 12:16
      * @修改人和其它信息
      */
-    public static String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
+    public String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
         if (!exitsBucket(bucketName)) {
             createBucket(bucketName);
         }
@@ -255,7 +260,7 @@
                     .stream(inputStream, file.getSize(), -1)
                     .contentType(file.getContentType())
                     .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            minioClient.putObject(putObjectArgs);
             inputStream.close();
             /*获取url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
@@ -264,7 +269,7 @@
                     .object(fileName)
                     .method(Method.GET)
                     .build();
-            String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
             String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
             return ObjectUrl;
         } catch (Exception ex) {
@@ -280,12 +285,12 @@
      * @param objectName 对象名称
      * @return boolean
      */
-    public static boolean removeObject(String bucket, String objectName) {
+    public boolean removeObject(String bucket, String objectName) {
         try {
             boolean exsit = exitsBucket(bucket);
             if (exsit) {
                 RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(objectName).build();
-                MinioClientSingleton.getMinioClient().removeObject(removeObjectArgs);
+                minioClient.removeObject(removeObjectArgs);
                 return true;
             }
         } catch (Exception e) {
@@ -300,7 +305,7 @@
      * @param objectNames 对象名称
      * @return boolean
      */
-    public static boolean removeObjects(String bucket, List<String> objectNames) {
+    public boolean removeObjects(String bucket, List<String> objectNames) {
         if (exitsBucket(bucket)) {
             try {
                 List<DeleteObject> objects = new LinkedList<>();
@@ -308,7 +313,7 @@
                     objects.add(new DeleteObject(str));
                 }
                 RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build();
-                Iterable<Result<DeleteError>> results = MinioClientSingleton.getMinioClient().removeObjects(removeObjectsArgs);
+                Iterable<Result<DeleteError>> results = minioClient.removeObjects(removeObjectsArgs);
                 /*删除完遍历结果,否则删不掉*/
                 for (Result<DeleteError> result : results) {
                     DeleteError error = result.get();
@@ -329,13 +334,37 @@
      * @param bucket 桶名称
      * @return {@link List}<{@link String}>
      */
-    public static List<String> getBucketObjectName(String bucket) {
+    public List<String> getBucketObjectName(String bucket) {
         boolean exsit = exitsBucket(bucket);
         if (exsit) {
             List<String> listObjetcName = new ArrayList<>();
             try {
                 ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().bucket(bucket).build();
-                Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(listObjectsArgs);
+                Iterable<Result<Item>> myObjects = minioClient.listObjects(listObjectsArgs);
+                for (Result<Item> result : myObjects) {
+                    Item item = result.get();
+                    listObjetcName.add(item.objectName());
+                }
+                return listObjetcName;
+            } catch (Exception ex) {
+                log.error("minio获取桶下对象异常:" + ex.getMessage());
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 获取单个桶中的所有文件对象名称
+     * @param [bucket,prefix]
+     * @return {@link List}<{@link String}>
+     */
+    public List<String> getBucketObjectName(String bucket, String prefix) {
+        boolean exsit = exitsBucket(bucket);
+        if (exsit) {
+            List<String> listObjetcName = new ArrayList<>();
+            try {
+                ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix(prefix).bucket(bucket).build();
+                Iterable<Result<Item>> myObjects = minioClient.listObjects(listObjectsArgs);
                 for (Result<Item> result : myObjects) {
                     Item item = result.get();
                     listObjetcName.add(item.objectName());
@@ -355,7 +384,7 @@
      * @param objectName 对象名 (文件夹名 + 文件名)
      * @return
      */
-    public static String getBucketObjectUrl(String bucketName, String objectName) {
+    public String getBucketObjectUrl(String bucketName, String objectName) {
         try {
             if (!exitsBucket(bucketName)) {
                 return "";
@@ -366,7 +395,9 @@
                     .object(objectName)
                     .method(Method.GET)
                     .build();
-            return MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            return ObjectUrl;
         } catch (Exception ex) {
             log.error("minio获取对象URL异常" + ex.getMessage());
         }
@@ -382,7 +413,7 @@
      * @param size        ⼤⼩
      * @param contextType 类型 Image/jpeg 浏览器可以直接打开,否则下载
      */
-    public static boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
+    public boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -393,7 +424,7 @@
                     .stream(stream, size, -1)
                     .contentType(contextType)
                     .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
             return true;
         } catch (Exception ex) {
             log.error("minio上传文件(通过stream)异常" + ex.getMessage());
@@ -409,7 +440,7 @@
      * @param file        ⽂件
      * @param contextType 类型 Image/jpeg 浏览器可以直接打开,否则下载
      */
-    public static boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
+    public boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -421,7 +452,7 @@
                     .stream(fileInputStream, file.length(), -1)
                     .contentType(contextType)
                     .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
             return true;
         } catch (Exception ex) {
             log.error("minio上传文件(通过File)异常" + ex.getMessage());
@@ -437,7 +468,7 @@
      * @param MultipartFile ⽂件
      * @param contextType   类型 Image/jpeg 浏览器可以直接打开,否则下载
      */
-    public static boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
+    public boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -449,7 +480,7 @@
                     .stream(inputStream, multipartFile.getSize(), -1)
                     .contentType(contextType)
                     .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
             return true;
         } catch (Exception ex) {
             log.error("minio上传文件(通过File)异常" + ex.getMessage());
@@ -465,7 +496,7 @@
      * @param MultipartFile ⽂件
      * @param contextType   类型 Image/jpeg 浏览器可以直接打开,否则下载
      */
-    public static boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
+    public boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -482,7 +513,7 @@
                     .stream(inputStream, multipartFile.getSize(), -1)
                     .contentType(contextType)
                     .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+            minioClient.putObject(putObjectArgs);
             return true;
         } catch (Exception ex) {
             log.error("minio上传文件(通过File)异常" + ex.getMessage());
@@ -498,7 +529,7 @@
      * @param localFilePathName
      * @return
      */
-    public static boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
+    public boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
         try {
             if (!exitsBucket(bucketName)) {
                 createBucket(bucketName);
@@ -514,7 +545,7 @@
                     .filename(localFilePathName)
                     .contentType(contextType)
                     .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().uploadObject(uploadObjectArgs);
+            ObjectWriteResponse objectWriteResponse = minioClient.uploadObject(uploadObjectArgs);
             return true;
         } catch (Exception e) {
             log.error("minio upload object file error " + e.getMessage());
@@ -530,42 +561,28 @@
      * @创建时间 2023/2/6 10:32
      * @修改人和其它信息
      */
-    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
-        Iterable<Result<Item>> listObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder()
+    public Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
+        Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
                 .bucket(bucketName)
                 .recursive(true)
                 .build());
         return listObjects;
     }
 
-    public static void main(String[] args) {
-        //        /*删除桶*/
-        //        boolean b = removeBucket("lsy");
-        //        log.info(String.valueOf(b));
-        //        /*创建桶*/
-        //        boolean lsy = createBucket("lsy");
-        //        log.info(String.valueOf(lsy));
-        //        /*判断桶是否存在*/
-        //        boolean pic = exitsBucket("lsy");
-        //        log.info(String.valueOf(pic));
-        /*查询所有桶*/
-        //        List<Bucket> listBuckets = getListBuckets();
-        //        for (Bucket bucket : listBuckets) {
-        //            log.info(bucket.name());
-        //        }
-        String bucket = "lsy";
-        String filename = UUID.randomUUID().toString().replace("-", "") + "pic.jpeg";
-        String fileFullPath = "C:\\Users\\Administrator\\Desktop\\微信截图_20230518102605.png";
-        //        uploadObject(bucket, filename, fileFullPath, "Image/jpeg");
-        //        String url = getObjectWithExpired(bucket, filename, 10, SECONDS);
-        //        System.out.println(url);
-        boolean b = removeBucket(bucket);
-        System.out.println(b);
-        //        boolean b = uploadObjectBylocalPath(bucket, filename, fileFullPath);
-        //        System.out.println(b);
-        //String url = getObjectWithExpired(bucket, filename, 10000);
-        //
-        //String url = getBucketObject(bucket, filename);
-        //      System.out.println(url); package com.example.minio;
+    /**
+     * @描述 获取桶中所有对象
+     * @参数 [bucketName,prefix]
+     * @返回值 java.lang.Iterable<io.minio.Result < io.minio.messages.Item>>
+     * @创建人 刘苏义
+     * @创建时间 2023/2/6 10:32
+     * @修改人和其它信息
+     */
+    public Iterable<Result<Item>> getObjectsByBucket(String bucketName, String prefix) {
+        Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
+                .bucket(bucketName)
+                .prefix(prefix)
+                .recursive(true)
+                .build());
+        return listObjects;
     }
 }
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
index 51d7958..83789ea 100644
--- a/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/sy/service/impl/ArdSyCarServiceImpl.java
@@ -1,6 +1,5 @@
 package com.ruoyi.sy.service.impl;
 
-import java.awt.geom.Point2D;
 import java.io.IOException;
 import java.io.InputStream;
 import java.text.ParseException;
@@ -24,7 +23,7 @@
 import com.ruoyi.sy.mapper.ArdSyCarDayMapper;
 import com.ruoyi.utils.tools.GisTool;
 import com.ruoyi.utils.websocket.util.WebSocketUtils;
-import com.ruoyi.device.hiksdk.config.MinioClientSingleton;
+import com.ruoyi.storage.minio.utils.MinioConfig;
 import com.ruoyi.storage.minio.utils.MinioUtils;
 import com.ruoyi.sy.domain.ArdSyUser;
 import com.ruoyi.sy.gps31.PositionContainer;
@@ -83,7 +82,8 @@
     RedisCache redisCache;
     @Resource
     private ArdSyCarDayMapper ardSyCarDayMapper;
-
+    @Resource
+    private MinioUtils minioUtil;
     private Map<Integer, Map<String, String>> logInMap = new HashMap();
 
     private Map<String, Timer> userCarTimerMap = new HashMap();
@@ -147,7 +147,7 @@
                 objectNames.add(ardSyCar.getCarPicture().split("/sycar/")[1]);
             }
         }
-        MinioUtils.removeObjects("sycar", objectNames);
+        minioUtil.removeObjects("sycar", objectNames);
         return ardSyCarMapper.deleteArdSyCarByIds(ids);
     }
 
@@ -264,12 +264,12 @@
 
     @Override
     public List<Map<String, String>> getAllCarModel() {
-        boolean exsit = MinioUtils.exitsBucket("sycar");
+        boolean exsit = minioUtil.exitsBucket("sycar");
         if (exsit) {
             List<Map<String, String>> listObjetcName = new ArrayList<>();
             try {
-                ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix("carmodel/").bucket("sycar").build();
-                Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(listObjectsArgs);
+               // ListObjectsArgs listObjectsArgs = ListObjectsArgs.builder().prefix("carmodel/").bucket("sycar").build();
+                Iterable<Result<Item>> myObjects = minioUtil.getObjectsByBucket("sycar","carmodel");
                 for (Result<Item> result : myObjects) {
                     Item item = result.get();
                     Map<String, String> map = new HashMap();
@@ -332,16 +332,16 @@
             if (ardSyCarr.getCarPicture() != null || !ardSyCarr.getCarPicture().equals("")) {
                 String objectName = ardSyCarr.getCarPicture().split("/sycar/")[1];
                 objectNames.add(objectName);
-                MinioUtils.removeObjects("sycar", objectNames);
+                minioUtil.removeObjects("sycar", objectNames);
             }
         }
         //判断文件是否为空
         if (null == carPicture || 0 == carPicture.getSize()) {
             return "";
         }
-        boolean exsit = MinioUtils.exitsBucket("sycar");
+        boolean exsit = minioUtil.exitsBucket("sycar");
         if (!exsit) {
-            boolean bucket = MinioUtils.createBucket("sycar");
+            boolean bucket = minioUtil.createBucket("sycar");
         }
         //文件名
         String originalFilename = carPicture.getOriginalFilename();
@@ -350,14 +350,15 @@
         try {
             InputStream inputStream = carPicture.getInputStream();
             /*上传对象*/
-            PutObjectArgs putObjectArgs = PutObjectArgs
-                    .builder()
-                    .bucket("sycar")
-                    .object(fileName)
-                    .stream(inputStream, carPicture.getSize(), -1)
-                    .contentType(carPicture.getContentType())
-                    .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
+//            PutObjectArgs putObjectArgs = PutObjectArgs
+//                    .builder()
+//                    .bucket("sycar")
+//                    .object(fileName)
+//                    .stream(inputStream, carPicture.getSize(), -1)
+//                    .contentType(carPicture.getContentType())
+//                    .build();
+//            MinioConfig.getMinioClient().putObject(putObjectArgs);
+            minioUtil.uploadObject("sycar",fileName,inputStream,carPicture.getSize(),carPicture.getContentType());
             inputStream.close();
             /*获取url*/
             GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
@@ -366,8 +367,8 @@
                     .object(fileName)
                     .method(Method.GET)
                     .build();
-            String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
-            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            //String presignedObjectUrl = MinioConfig.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String ObjectUrl = minioUtil.getBucketObjectUrl("sycar", fileName);
             if (id != null && !id.equals("")) {//id为非必要
                 ArdSyCar ardSyCar = new ArdSyCar();
                 ardSyCar.setId(id);
diff --git a/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java b/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
index 7a69f81..7c1e365 100644
--- a/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
+++ b/ard-work/src/main/java/com/ruoyi/test/ReadAccessDatabase.java
@@ -8,32 +8,23 @@
  * @Version: 1.0
  **/
 
-import com.ruoyi.app.position.domain.ArdAppPosition;
-import com.ruoyi.utils.websocket.util.WebSocketUtils;
 import lombok.extern.slf4j.Slf4j;
-
-import java.io.UnsupportedEncodingException;
-import java.nio.charset.StandardCharsets;
 import java.sql.*;
-import java.util.*;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
 @Slf4j
 public class ReadAccessDatabase {
 
     public static void main(String[] args) {
-//        // 多个数据库文件路径
-//        String[] dbPaths = {
-//                "D:\\mdb\\道路中心线.mdb",
-//                "D:\\mdb\\防风林-灌木.mdb",
-//                // 添加更多的数据库文件路径
-//        };
-//
-//        // 遍历每个数据库文件
-//        for (String dbPath : dbPaths) {
-//            readDataFromAccessDatabase(dbPath);
-//        }
+        // 多个数据库文件路径
+        String[] dbPaths = {
+                "D:\\Workspaces\\ard\\安瑞达工作资料\\mdb\\道路中心线.mdb"
+//                "D:\\Workspaces\\ard\\安瑞达工作资料\\mdb\\防风林-灌木.mdb",
+                // 添加更多的数据库文件路径
+        };
+
+        // 遍历每个数据库文件
+        for (String dbPath : dbPaths) {
+            readDataFromAccessDatabase(dbPath);
+        }
     }
 
     public static void readDataFromAccessDatabase(String dbPath) {
@@ -54,16 +45,16 @@
                 if (!tableName.equals("道路中心线")) {
                     continue;
                 }
-                System.out.println("表名: " + tableName);
+                log.info("表名: " + tableName);
 
                 // 获取表的字段元数据
- //               ResultSet column = metaData.getColumns(null, null, tableName, null);
+                ResultSet column = metaData.getColumns(null, null, tableName, null);
                 // 遍历字段
-//                while (column.next()) {
-//                    String columnName = column.getString("COLUMN_NAME");
-//                    System.out.println("字段名: " + columnName);
-//                }
-//                column.close();
+                while (column.next()) {
+                    String columnName = column.getString("COLUMN_NAME");
+                    log.info("字段名: " + columnName);
+                }
+                column.close();
                 // 执行查询操作
                 String sql = "SELECT * FROM " + tableName; // 替换为你要查询的表名
                 Statement statement = connection.createStatement();
@@ -72,12 +63,12 @@
                 while (resultSet.next()) {
                     // 读取每一行数据
                     String id = resultSet.getString(1); // 根据表中的列名获取数据
-                    String name = resultSet.getString("编号");
-
+                    String no = resultSet.getString("编号");
+                    String name = resultSet.getString("道路名称");
                     // 可以根据具体的表结构继续获取其他字段的数据
 
                     // 在这里处理获取到的数据,例如输出到控制台或保存到集合中
-                    System.out.println("ID: " + id + ", Name: " + name);
+                    log.info("ID: " + id + ", No: " + no+ ", Name: " + name);
                 }
                 // 关闭连接
                 resultSet.close();
@@ -89,5 +80,7 @@
             e.printStackTrace();
         }
     }
+
+
 }
 
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java
index 37a4a18..00f5496 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumer.java
@@ -3,6 +3,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.eclipse.paho.client.mqttv3.*;
 import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.stereotype.Component;
@@ -18,12 +19,30 @@
 @Slf4j(topic = "mqtt")
 public class MqttConsumer implements ApplicationRunner {
 
+    @Value("${mqtt.enabled}")
+    private Boolean MQTT_ENABLED;
+    @Value("${mqtt.topic}")
+    private String MQTT_TOPIC;
+    @Value("${mqtt.host}")
+    private String MQTT_HOST;
+    @Value("${mqtt.clientId}")
+    private String MQTT_CLIENT_ID;
+    @Value("${mqtt.username}")
+    private String MQTT_USER_NAME;
+    @Value("${mqtt.password}")
+    private String MQTT_PASSWORD;
+    @Value("${mqtt.timeout}")
+    private int MQTT_TIMEOUT;
+    @Value("${mqtt.keepalive}")
+    private int MQTT_KEEP_ALIVE;
+
     private static MqttClient client;
+
 
     @Override
     public void run(ApplicationArguments args) {
         log.debug("初始化并启动mqtt......");
-        if(PropertiesUtil.MQTT_ENABLED)
+        if(MQTT_ENABLED)
         {
             this.connect();
         }
@@ -38,7 +57,7 @@
             getClient();
             // 2 设置配置
             MqttConnectOptions options = getOptions();
-            String[] topic = PropertiesUtil.MQTT_TOPIC.split(",");
+            String[] topic = MQTT_TOPIC.split(",");
             // 3 消息发布质量
             int[] qos = getQos(topic.length);
             // 4 最后设置
@@ -54,7 +73,7 @@
     public void getClient() {
         try {
             if (null == client) {
-                client = new MqttClient(PropertiesUtil.MQTT_HOST, PropertiesUtil.MQTT_CLIENT_ID, new MemoryPersistence());
+                client = new MqttClient(MQTT_HOST, MQTT_CLIENT_ID, new MemoryPersistence());
             }
             log.debug("--创建mqtt客户端");
         } catch (Exception e) {
@@ -68,12 +87,12 @@
     public MqttConnectOptions getOptions() {
         MqttConnectOptions options = new MqttConnectOptions();
         //设置用户名密码
-        options.setUserName(PropertiesUtil.MQTT_USER_NAME);
-        options.setPassword(PropertiesUtil.MQTT_PASSWORD.toCharArray());
+        options.setUserName(MQTT_USER_NAME);
+        options.setPassword(MQTT_PASSWORD.toCharArray());
         // 设置超时时间
-        options.setConnectionTimeout(PropertiesUtil.MQTT_TIMEOUT);
+        options.setConnectionTimeout(MQTT_TIMEOUT);
         // 设置会话心跳时间
-        options.setKeepAliveInterval(PropertiesUtil.MQTT_KEEP_ALIVE);
+        options.setKeepAliveInterval(MQTT_KEEP_ALIVE);
         // 是否清除session
         options.setCleanSession(true);
         log.debug("--生成mqtt配置对象");
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
index 09fa6c9..8504a14 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/mqtt/MqttConsumerCallback.java
@@ -92,10 +92,10 @@
             if (null != topic && null != qos) {
                 if (client.isConnected()) {
                     client.subscribe(topic, qos);
-                    log.info("mqtt连接成功,客户端ID:" + PropertiesUtil.MQTT_CLIENT_ID);
+                    log.info("mqtt连接成功" );
                     log.info("--订阅主题::" + Arrays.toString(topic));
                 } else {
-                    log.info("mqtt连接失败,客户端ID:" + PropertiesUtil.MQTT_CLIENT_ID);
+                    log.info("mqtt连接失败");
                 }
             }
         } catch (Exception e) {
diff --git a/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java b/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java
deleted file mode 100644
index 0d9b555..0000000
--- a/ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.ruoyi.utils.mqtt;
-
-import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-
-import java.util.Objects;
-import java.util.Properties;
-
-/**
- * @Description: 获取配置信息
- * @ClassName: PropertiesUtil
- * @Author: 刘苏义
- * @Date: 2023年06月06日9:40
- * @Version: 1.0
- **/
-@Component
-public class PropertiesUtil {
-
-    public static String MQTT_HOST;
-    public static String MQTT_CLIENT_ID;
-    public static String MQTT_USER_NAME;
-    public static String MQTT_PASSWORD;
-    public static String MQTT_TOPIC;
-    public static Integer MQTT_TIMEOUT;
-    public static Integer MQTT_KEEP_ALIVE;
-    public static Boolean MQTT_ENABLED;
-    static {
-        MQTT_HOST = getYmlNew("mqtt.host");
-        MQTT_CLIENT_ID = getYmlNew("mqtt.clientId");
-        MQTT_USER_NAME = getYmlNew("mqtt.username");
-        MQTT_PASSWORD = getYmlNew("mqtt.password");
-        MQTT_TOPIC = getYmlNew("mqtt.topic");
-        MQTT_TIMEOUT = Integer.valueOf(Objects.requireNonNull(getYmlNew("mqtt.timeout")));
-        MQTT_KEEP_ALIVE = Integer.valueOf(Objects.requireNonNull(getYmlNew("mqtt.keepalive")));
-        MQTT_ENABLED = Boolean.valueOf(getYmlNew("mqtt.enabled"));
-    }
-
-    public static String getYmlNew(String key) {
-        Resource resource = new ClassPathResource("application-ard.yml");
-        Properties properties;
-        try {
-            YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
-            yamlFactory.setResources(resource);
-            properties = yamlFactory.getObject();
-        } catch (Exception e) {
-            e.printStackTrace();
-            return null;
-        }
-        assert properties != null;
-        return properties.get(key).toString();
-    }
-}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/spring/SpringUtils.java b/ard-work/src/main/java/com/ruoyi/utils/spring/SpringUtils.java
new file mode 100644
index 0000000..58f71a6
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/spring/SpringUtils.java
@@ -0,0 +1,158 @@
+package com.ruoyi.utils.spring;
+
+import org.springframework.aop.framework.AopContext;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.NoSuchBeanDefinitionException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+import com.ruoyi.common.utils.StringUtils;
+
+/**
+ * spring工具类 方便在非spring管理环境中获取bean
+ * 
+ * @author ruoyi
+ */
+@Component
+public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationContextAware 
+{
+    /** Spring应用上下文环境 */
+    private static ConfigurableListableBeanFactory beanFactory;
+
+    private static ApplicationContext applicationContext;
+
+    @Override
+    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException 
+    {
+        SpringUtils.beanFactory = beanFactory;
+    }
+
+    @Override
+    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException 
+    {
+        SpringUtils.applicationContext = applicationContext;
+    }
+
+    /**
+     * 获取对象
+     *
+     * @param name
+     * @return Object 一个以所给名字注册的bean的实例
+     * @throws BeansException
+     *
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getBean(String name) throws BeansException
+    {
+        return (T) beanFactory.getBean(name);
+    }
+
+    /**
+     * 获取类型为requiredType的对象
+     *
+     * @param clz
+     * @return
+     * @throws BeansException
+     *
+     */
+    public static <T> T getBean(Class<T> clz) throws BeansException
+    {
+        T result = (T) beanFactory.getBean(clz);
+        return result;
+    }
+
+    /**
+     * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
+     *
+     * @param name
+     * @return boolean
+     */
+    public static boolean containsBean(String name)
+    {
+        return beanFactory.containsBean(name);
+    }
+
+    /**
+     * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
+     *
+     * @param name
+     * @return boolean
+     * @throws NoSuchBeanDefinitionException
+     *
+     */
+    public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.isSingleton(name);
+    }
+
+    /**
+     * @param name
+     * @return Class 注册对象的类型
+     * @throws NoSuchBeanDefinitionException
+     *
+     */
+    public static Class<?> getType(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getType(name);
+    }
+
+    /**
+     * 如果给定的bean名字在bean定义中有别名,则返回这些别名
+     *
+     * @param name
+     * @return
+     * @throws NoSuchBeanDefinitionException
+     *
+     */
+    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getAliases(name);
+    }
+
+    /**
+     * 获取aop代理对象
+     * 
+     * @param invoker
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getAopProxy(T invoker)
+    {
+        return (T) AopContext.currentProxy();
+    }
+
+    /**
+     * 获取当前的环境配置,无配置返回null
+     *
+     * @return 当前的环境配置
+     */
+    public static String[] getActiveProfiles()
+    {
+        return applicationContext.getEnvironment().getActiveProfiles();
+    }
+
+    /**
+     * 获取当前的环境配置,当有多个环境配置时,只获取第一个
+     *
+     * @return 当前的环境配置
+     */
+    public static String getActiveProfile()
+    {
+        final String[] activeProfiles = getActiveProfiles();
+        return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;
+    }
+
+    /**
+     * 获取配置文件中的值
+     *
+     * @param key 配置文件的key
+     * @return 当前的配置文件的值
+     *
+     */
+    public static String getRequiredProperty(String key)
+    {
+        return applicationContext.getEnvironment().getRequiredProperty(key);
+    }
+}
diff --git a/ard-work/src/main/resources/templates/test.html b/ard-work/src/main/resources/templates/test.html
index a9acd06..15e9981 100644
--- a/ard-work/src/main/resources/templates/test.html
+++ b/ard-work/src/main/resources/templates/test.html
@@ -162,7 +162,7 @@
             }
         })
 
-        opt = {"username": "liusuyi", "password": "5959932"};
+        opt = {"username": "admin", "password": "admin123"};
         $.ajax({
             headers: {
                 'Accept': 'application/json',
diff --git a/ruoyi-admin/src/main/resources/application-ard.yml b/ruoyi-admin/src/main/resources/application-ard.yml
deleted file mode 100644
index 1c15525..0000000
--- a/ruoyi-admin/src/main/resources/application-ard.yml
+++ /dev/null
@@ -1,50 +0,0 @@
-# webrtc-streamer配置
-webrtc:
-  enabled: false
-  host: 127.0.0.1:8000
-# minio配置
-minio:
-  enabled: false
-  endpoint: http://192.168.1.227:9000
-  accessKey: admin
-  secretKey: xzx12345
-  path: G:/DATA
-# forest配置
-forest:
-  backend: okhttp3             # 后端HTTP框架(默认为 okhttp3)
-  max-connections: 1000        # 连接池最大连接数(默认为 500)
-  max-route-connections: 500   # 每个路由的最大连接数(默认为 500)
-  max-request-queue-size: 100  # [自v1.5.22版本起可用] 最大请求等待队列大小
-  max-async-thread-size: 300   # [自v1.5.21版本起可用] 最大异步线程数
-  max-async-queue-size: 16     # [自v1.5.22版本起可用] 最大异步线程池队列大小
-  timeout: 3000                # [已不推荐使用] 请求超时时间,单位为毫秒(默认为 3000)
-  connect-timeout: 3000        # 连接超时时间,单位为毫秒(默认为 timeout)
-  read-timeout: 3000           # 数据读取超时时间,单位为毫秒(默认为 timeout)
-  max-retry-count: 0           # 请求失败后重试次数(默认为 0 次不重试)
-  ssl-protocol: TLS            # 单向验证的HTTPS的默认TLS协议(默认为 TLS)
-  log-enabled: true            # 打开或关闭日志(默认为 true)
-  log-request: true            # 打开/关闭Forest请求日志(默认为 true)
-  log-response-status: true    # 打开/关闭Forest响应状态日志(默认为 true)
-  log-response-content: true   # 打开/关闭Forest响应内容日志(默认为 false)
-  async-mode: platform         # [自v1.5.27版本起可用] 异步模式(默认为 platform)
-#流媒体转码服务器
-mediamtx:
-  enabled: false
-  host: 127.0.0.1
-#mqtt
-mqtt:
-  host: tcp://192.168.1.15:1883
-  clientId: m3
-  username: admin
-  password: xzx12345
-  topic: apponekey,radar
-  timeout: 100
-  keepalive: 60
-  enabled: true
-
-#异步线程池配置
-ThreadPoolTask:
-  corePoolSize: 20
-  maxPoolSize: 40
-  keepAliveSeconds: 300
-  queueCapacity: 50
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-dev-druid.yml b/ruoyi-admin/src/main/resources/application-dev-druid.yml
new file mode 100644
index 0000000..cc740d1
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-dev-druid.yml
@@ -0,0 +1,58 @@
+# 数据源配置
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      # 主库数据源
+      master:
+        driverClassName: org.postgresql.Driver
+        url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified
+        username: postgres
+        password: postgres
+        # 从库数据源
+      slave:
+      # 从数据源开关/默认关闭
+      # enabled: true
+      # driverClassName: org.postgresql.Driver
+      # url: jdbc:postgresql://112.98.126.2:35432/ard732
+      # username: postgres
+      # password: Yykj.2017
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 3000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..715998e
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -0,0 +1,101 @@
+# 开发环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 8080
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # 连接数满后的排队数,默认为100
+    accept-count: 1000
+    threads:
+      # tomcat最大线程数,默认为200
+      max: 800
+      # Tomcat启动初始化的线程数,默认值10
+      min-spare: 100
+# Spring配置
+spring:
+  # redis 配置
+  redis:
+    # 地址
+    host: 127.0.0.1
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password:
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+# 日志配置
+logging:
+  level:
+    authorize: info
+    minio: info
+    hikSdk: info
+    stealAlarm: info
+    websocket: info
+    patrolInspectionTask: info
+    mqtt: info
+    guideQueue: info
+    rongCloud: info
+    cmd: info
+    uav: info
+    sy: info
+
+
+# webrtc-streamer配置
+webrtc:
+  enabled: true
+  host: 127.0.0.1:8000
+# minio配置
+minio:
+  enabled: false
+  endpoint: http://192.168.1.15:9001
+  accessKey: admin
+  secretKey: xzx12345
+  path: G:/DATA
+# forest配置
+forest:
+  backend: okhttp3             # 后端HTTP框架(默认为 okhttp3)
+  max-connections: 1000        # 连接池最大连接数(默认为 500)
+  max-route-connections: 500   # 每个路由的最大连接数(默认为 500)
+  max-request-queue-size: 100  # [自v1.5.22版本起可用] 最大请求等待队列大小
+  max-async-thread-size: 300   # [自v1.5.21版本起可用] 最大异步线程数
+  max-async-queue-size: 16     # [自v1.5.22版本起可用] 最大异步线程池队列大小
+  timeout: 3000                # [已不推荐使用] 请求超时时间,单位为毫秒(默认为 3000)
+  connect-timeout: 3000        # 连接超时时间,单位为毫秒(默认为 timeout)
+  read-timeout: 3000           # 数据读取超时时间,单位为毫秒(默认为 timeout)
+  max-retry-count: 0           # 请求失败后重试次数(默认为 0 次不重试)
+  ssl-protocol: TLS            # 单向验证的HTTPS的默认TLS协议(默认为 TLS)
+  log-enabled: true            # 打开或关闭日志(默认为 true)
+  log-request: true            # 打开/关闭Forest请求日志(默认为 true)
+  log-response-status: true    # 打开/关闭Forest响应状态日志(默认为 true)
+  log-response-content: true   # 打开/关闭Forest响应内容日志(默认为 false)
+  async-mode: platform         # [自v1.5.27版本起可用] 异步模式(默认为 platform)
+#流媒体转码服务器
+mediamtx:
+  enabled: true
+  host: 127.0.0.1
+#mqtt
+mqtt:
+  host: tcp://192.168.1.15:1883
+  clientId: m227
+  username: admin
+  password: xzx12345
+  topic: minioEvent
+  timeout: 100
+  keepalive: 60
+  enabled: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
deleted file mode 100644
index 031a481..0000000
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-# 数据源配置
-spring:
-    datasource:
-        type: com.alibaba.druid.pool.DruidDataSource
-        druid:
-            # 主库数据源
-            master:
-                driverClassName: org.postgresql.Driver
-                url: jdbc:postgresql://111.40.46.199:15432/ry-vue?stringtype=unspecified
-                username: postgres
-                password: Yykj.2021
-#                url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified
-#                username: postgres
-#                password: postgres
-            # 从库数据源
-            slave:
-                # 从数据源开关/默认关闭
-#                enabled: true
-#                driverClassName: org.postgresql.Driver
-#                url: jdbc:postgresql://112.98.126.2:35432/ard732
-#                username: postgres
-#                password: Yykj.2017
-            # 初始连接数
-            initialSize: 5
-            # 最小连接池数量
-            minIdle: 10
-            # 最大连接池数量
-            maxActive: 20
-            # 配置获取连接等待超时的时间
-            maxWait: 60000
-            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
-            timeBetweenEvictionRunsMillis: 60000
-            # 配置一个连接在池中最小生存的时间,单位是毫秒
-            minEvictableIdleTimeMillis: 300000
-            # 配置一个连接在池中最大生存的时间,单位是毫秒
-            maxEvictableIdleTimeMillis: 900000
-            # 配置检测连接是否有效
-            validationQuery: SELECT 1
-            testWhileIdle: true
-            testOnBorrow: false
-            testOnReturn: false
-            webStatFilter:
-                enabled: true
-            statViewServlet:
-                enabled: true
-                # 设置白名单,不填则允许所有访问
-                allow:
-                url-pattern: /druid/*
-                # 控制台管理用户名和密码
-                login-username: ruoyi
-                login-password: 123456
-            filter:
-                stat:
-                    enabled: true
-                    # 慢SQL记录
-                    log-slow-sql: true
-                    slow-sql-millis: 1000
-                    merge-sql: true
-                wall:
-                    config:
-                        multi-statement-allow: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-prod-druid.yml b/ruoyi-admin/src/main/resources/application-prod-druid.yml
new file mode 100644
index 0000000..b946ee0
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-prod-druid.yml
@@ -0,0 +1,58 @@
+# 数据源配置
+spring:
+  datasource:
+    type: com.alibaba.druid.pool.DruidDataSource
+    druid:
+      # 主库数据源
+      master:
+        driverClassName: org.postgresql.Driver
+        url: jdbc:postgresql://112.98.126.2:35432/ry-vue?stringtype=unspecified
+        username: postgres
+        password: Yykj.2017
+        # 从库数据源
+      slave:
+      # 从数据源开关/默认关闭
+      # enabled: true
+      # driverClassName: org.postgresql.Driver
+      # url: jdbc:postgresql://112.98.126.2:35432/ard732
+      # username: postgres
+      # password: Yykj.2017
+      # 初始连接数
+      initialSize: 5
+      # 最小连接池数量
+      minIdle: 10
+      # 最大连接池数量
+      maxActive: 20
+      # 配置获取连接等待超时的时间
+      maxWait: 60000
+      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+      timeBetweenEvictionRunsMillis: 60000
+      # 配置一个连接在池中最小生存的时间,单位是毫秒
+      minEvictableIdleTimeMillis: 300000
+      # 配置一个连接在池中最大生存的时间,单位是毫秒
+      maxEvictableIdleTimeMillis: 900000
+      # 配置检测连接是否有效
+      validationQuery: SELECT 1
+      testWhileIdle: true
+      testOnBorrow: false
+      testOnReturn: false
+      webStatFilter:
+        enabled: true
+      statViewServlet:
+        enabled: true
+        # 设置白名单,不填则允许所有访问
+        allow:
+        url-pattern: /druid/*
+        # 控制台管理用户名和密码
+        login-username: ruoyi
+        login-password: 123456
+      filter:
+        stat:
+          enabled: true
+          # 慢SQL记录
+          log-slow-sql: true
+          slow-sql-millis: 3000
+          merge-sql: true
+        wall:
+          config:
+            multi-statement-allow: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application-prod.yml b/ruoyi-admin/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..67cc120
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/application-prod.yml
@@ -0,0 +1,101 @@
+# 生产环境配置
+server:
+  # 服务器的HTTP端口,默认为8080
+  port: 8080
+  servlet:
+    # 应用的访问路径
+    context-path: /
+  tomcat:
+    # tomcat的URI编码
+    uri-encoding: UTF-8
+    # 连接数满后的排队数,默认为100
+    accept-count: 1000
+    threads:
+      # tomcat最大线程数,默认为200
+      max: 800
+      # Tomcat启动初始化的线程数,默认值10
+      min-spare: 100
+# Spring配置
+spring:
+  # redis 配置
+  redis:
+    # 地址
+    host: 192.168.5.229
+    # 端口,默认为6379
+    port: 6379
+    # 数据库索引
+    database: 0
+    # 密码
+    password:
+    # 连接超时时间
+    timeout: 10s
+    lettuce:
+      pool:
+        # 连接池中的最小空闲连接
+        min-idle: 0
+        # 连接池中的最大空闲连接
+        max-idle: 8
+        # 连接池的最大数据库连接数
+        max-active: 8
+        # #连接池最大阻塞等待时间(使用负值表示没有限制)
+        max-wait: -1ms
+# 日志配置
+logging:
+  level:
+    authorize: info
+    minio: info
+    hikSdk: info
+    stealAlarm: info
+    websocket: info
+    patrolInspectionTask: info
+    mqtt: info
+    guideQueue: info
+    rongCloud: info
+    cmd: info
+    uav: info
+    sy: info
+
+# webrtc-streamer配置
+webrtc:
+  enabled: false
+  host: 192.168.5.229:8000
+
+# minio配置
+minio:
+  enabled: false
+  endpoint: http://192.168.5.229:9001
+  accessKey: admin
+  secretKey: xzx12345
+  path: F:/DATA
+# forest配置
+forest:
+  backend: okhttp3             # 后端HTTP框架(默认为 okhttp3)
+  max-connections: 1000        # 连接池最大连接数(默认为 500)
+  max-route-connections: 500   # 每个路由的最大连接数(默认为 500)
+  max-request-queue-size: 100  # [自v1.5.22版本起可用] 最大请求等待队列大小
+  max-async-thread-size: 300   # [自v1.5.21版本起可用] 最大异步线程数
+  max-async-queue-size: 16     # [自v1.5.22版本起可用] 最大异步线程池队列大小
+  timeout: 3000                # [已不推荐使用] 请求超时时间,单位为毫秒(默认为 3000)
+  connect-timeout: 3000        # 连接超时时间,单位为毫秒(默认为 timeout)
+  read-timeout: 3000           # 数据读取超时时间,单位为毫秒(默认为 timeout)
+  max-retry-count: 0           # 请求失败后重试次数(默认为 0 次不重试)
+  ssl-protocol: TLS            # 单向验证的HTTPS的默认TLS协议(默认为 TLS)
+  log-enabled: true            # 打开或关闭日志(默认为 true)
+  log-request: true            # 打开/关闭Forest请求日志(默认为 true)
+  log-response-status: true    # 打开/关闭Forest响应状态日志(默认为 true)
+  log-response-content: true   # 打开/关闭Forest响应内容日志(默认为 false)
+  async-mode: platform         # [自v1.5.27版本起可用] 异步模式(默认为 platform)
+#流媒体转码服务器
+mediamtx:
+  enabled: true
+  host: 192.168.5.229
+#mqtt
+mqtt:
+  host: tcp://192.168.5.229:1883
+  clientId: server229
+  username: admin
+  password: xzx12345
+  topic: minioEvent,apponekey,camera,external
+  timeout: 100
+  keepalive: 60
+  enabled: true
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 6903577..6199853 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -11,36 +11,9 @@
   # 文件路径 示例( Windows配置D:/ard/uploadPath,Linux配置 /home/ard/uploadPath)
   profile: D:/ard/uploadPath
   # 获取ip地址开关
-  addressEnabled: false
+  addressEnabled: true
   # 验证码类型 math 数组计算 char 字符验证
   captchaType: char
-
-# 开发环境配置
-server:
-  # 服务器的HTTP端口,默认为8080
-  port: 8080
-  servlet:
-    # 应用的访问路径
-    context-path: /
-  tomcat:
-    # tomcat的URI编码
-    uri-encoding: UTF-8
-    # 连接数满后的排队数,默认为100
-    accept-count: 1000
-    threads:
-      # tomcat最大线程数,默认为200
-      max: 800
-      # Tomcat启动初始化的线程数,默认值10
-      min-spare: 100
-
-# 日志配置
-logging:
-  level:
-    com.ruoyi.utils.tube: debug
-    com.ruoyi.inspect: info
-    org.springframework: warn
-    com.example.mapper: debug
-
 # 用户配置
 user:
   password:
@@ -48,60 +21,14 @@
     maxRetryCount: 5
     # 密码锁定时间(默认10分钟)
     lockTime: 10
-
-# Spring配置
-spring:
-  # 资源信息
-  messages:
-    # 国际化资源文件路径
-    basename: i18n/messages
-  profiles: 
-    active: druid,ard
-  # 文件上传
-  servlet:
-     multipart:
-       # 单个文件大小
-       max-file-size:  10MB
-       # 设置总上传的文件大小
-       max-request-size:  20MB
-  # 服务模块
-  devtools:
-    restart:
-      # 热部署开关
-      enabled: false
-  # redis 配置
-  redis:
-    # 地址
-    host: 192.168.1.15
-    # 端口,默认为6379
-    port: 6379
-    # 数据库索引
-    database: 0
-    # 密码
-    password:
-    # 连接超时时间
-    timeout: 10s
-    lettuce:
-      pool:
-        # 连接池中的最小空闲连接
-        min-idle: 0
-        # 连接池中的最大空闲连接
-        max-idle: 8
-        # 连接池的最大数据库连接数
-        max-active: 8
-        # #连接池最大阻塞等待时间(使用负值表示没有限制)
-        max-wait: -1ms
-  thymeleaf:
-    cache: false
 # token配置
 token:
-    # 令牌自定义标识
-    header: Authorization
-    # 令牌密钥
-    secret: abcdefghijklmnopqrstuvwxyz
-    # 令牌有效期(默认30分钟)
-    expireTime: 30
-  
+  # 令牌自定义标识
+  header: Authorization
+  # 令牌密钥
+  secret: abcdefghijklmnopqrstuvwxyz
+  # 令牌有效期(默认30分钟)
+  expireTime: 30
 # MyBatis配置
 #mybatis:
 #    # 搜索指定包别名
@@ -114,6 +41,10 @@
   type-Aliases-Package: com.ruoyi.**.domain
   mapper-Locations: classpath*:mapper/**/*Mapper.xml
   config-Location: classpath:mybatis/mybatis-config.xml
+  global-config:
+    banner: off # 关闭mybatisplus启动图标
+    db-config: #主键不用MyBatis plus的雪花算法,用数据库的主键自增
+      id-type: auto
 #  configuration:
 #    # 是否开启自动驼峰命名规则映射:从数据库列名到Java属性驼峰命名的类似映射
 #    map-underscore-to-camel-case: true
@@ -121,30 +52,54 @@
 #    call-setters-on-nulls: true
 #    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
 #    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
-
 # PageHelper分页插件
-pagehelper: 
+pagehelper:
   helperDialect: postgresql
   supportMethodsArguments: true
-  params: count=countSql 
-
+  params: count=countSql
 # Swagger配置
 swagger:
   # 是否开启swagger
   enabled: true
   # 请求前缀
   pathMapping: /
-
 # knife4j增强功能
 knife4j:
   enable: true
-
 # 防止XSS攻击
-xss: 
+xss:
   # 过滤开关
   enabled: true
   # 排除链接(多个用逗号分隔)
   excludes: /system/notice
   # 匹配链接
   urlPatterns: /system/*,/monitor/*,/tool/*
+#异步线程池配置
+ThreadPoolTask:
+  corePoolSize: 20
+  maxPoolSize: 40
+  keepAliveSeconds: 300
+  queueCapacity: 50
+# Spring配置
+spring:
+  # 资源信息
+  messages:
+    # 国际化资源文件路径
+    basename: i18n/messages
+  # 文件上传
+  servlet:
+    multipart:
+      # 单个文件大小
+      max-file-size: 10MB
+      # 设置总上传的文件大小
+      max-request-size: 20MB
+  # 服务模块
+  devtools:
+    restart:
+      # 热部署开关
+      enabled: false
+  thymeleaf:
+    cache: false
+  profiles:
+    active: dev-druid,dev
+
diff --git a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java
index 3ca0f65..69ea287 100644
--- a/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java
+++ b/ruoyi-quartz/src/main/java/com/ruoyi/quartz/task/MinioTask.java
@@ -6,6 +6,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.time.ZoneId;
 import java.time.format.DateTimeFormatter;
@@ -21,6 +22,8 @@
 @Component("MinioTask")
 @Slf4j(topic = "minio")
 public class MinioTask {
+    @Resource
+    MinioUtils minioUtil;
 
     public void delHistoryTask(Integer saveDays) {
         log.debug("执行历史数据删除");
@@ -30,7 +33,7 @@
             buckets.add("pic");
             buckets.add("record");
             for (String name : buckets) {
-                Iterable<Result<Item>> listObjectsPic = MinioUtils.getObjectsByBucket(name);
+                Iterable<Result<Item>> listObjectsPic = minioUtil.getObjectsByBucket(name);
                 for (Result<Item> result : listObjectsPic) {
                     Item item = result.get();
                     DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("Asia/Shanghai"));
@@ -48,7 +51,7 @@
                         log.debug("objectTime : " + objectTime);
                         log.debug("expireTime : " + expireTime);
                         log.debug("objectTime 时间在 expireTime 之前,执行删除");
-                        boolean b = MinioUtils.removeObject(name, item.objectName());
+                        boolean b = minioUtil.removeObject(name, item.objectName());
                         if (b) {
                             log.debug("成功删除过期数据:" + item.objectName() + "---" + item.lastModified());
                         }

--
Gitblit v1.9.3