From 3dadd51018b621bbb5b3abcde94df6d8fa9fbf6b Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期三, 23 八月 2023 14:36:34 +0800
Subject: [PATCH] 重构minio工具类 配置文件区分生产环境和开发环境

---
 src/main/java/com/ard/utils/minio/MinioUtils.java                                 |  592 ++++++++++++++++++++
 src/main/java/com/ard/utils/spring/SpringUtils.java                               |  158 +++++
 src/main/java/com/ard/alarm/apponekey/controller/ArdAlarmApponekeyController.java |   12 
 src/main/java/com/ard/utils/mqtt/MqttConsumerCallback.java                        |    4 
 src/main/resources/application-prod.yml                                           |   67 ++
 src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java                |   11 
 /dev/null                                                                         |   56 -
 src/main/java/com/ard/utils/minio/MinioConfig.java                                |   33 +
 src/main/java/com/ard/utils/udp/NettyUdpHandler.java                              |    4 
 src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java                 |   18 
 src/main/resources/application-dev.yml                                            |   70 ++
 src/main/java/com/ard/utils/mqtt/MqttConsumer.java                                |   31 
 src/main/java/com/ard/utils/other/StringUtils.java                                |  577 +++++++++++++++++++
 src/main/resources/application.yml                                                |   63 --
 14 files changed, 1,548 insertions(+), 148 deletions(-)

diff --git a/src/main/java/com/ard/alarm/apponekey/controller/ArdAlarmApponekeyController.java b/src/main/java/com/ard/alarm/apponekey/controller/ArdAlarmApponekeyController.java
index eb9295d..c9428ee 100644
--- a/src/main/java/com/ard/alarm/apponekey/controller/ArdAlarmApponekeyController.java
+++ b/src/main/java/com/ard/alarm/apponekey/controller/ArdAlarmApponekeyController.java
@@ -1,12 +1,12 @@
 package com.ard.alarm.apponekey.controller;
 
-import com.ard.utils.hiksdk.util.minio.MinioUtils;
 import com.ard.utils.http.AjaxResult;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.ard.utils.minio.MinioUtils;
 import org.springframework.web.bind.annotation.*;
 import com.ard.alarm.apponekey.domain.ArdAlarmApponekey;
 import com.ard.alarm.apponekey.service.IArdAlarmApponekeyService;
 import org.springframework.web.multipart.MultipartFile;
+import javax.annotation.Resource;
 
 
 /**
@@ -18,16 +18,16 @@
 @RestController
 @RequestMapping("/alarm/apponekey")
 public class ArdAlarmApponekeyController {
-    @Autowired
+    @Resource
     private IArdAlarmApponekeyService ardAlarmApponekeyService;
-
-
+    @Resource
+    private MinioUtils minioUtil;
     /**
      * 鏂板app涓�閿姤璀�
      */
     @PostMapping
     public AjaxResult add(String userId,String name, Double longitude,Double latitude,Double altitude,MultipartFile file) {
-        String url = MinioUtils.putObjectAndGetUrl("record", file);
+        String url = minioUtil.putObjectAndGetUrl("record", file);
         ArdAlarmApponekey ardAlarmApponekey =new ArdAlarmApponekey();
         ardAlarmApponekey.setUserId(userId);
         ardAlarmApponekey.setName(name);
diff --git a/src/main/java/com/ard/config/MinioClientSingleton.java b/src/main/java/com/ard/config/MinioClientSingleton.java
deleted file mode 100644
index 3cdbd35..0000000
--- a/src/main/java/com/ard/config/MinioClientSingleton.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.ard.config;
-
-import com.ard.utils.other.SpringTool;
-import io.minio.MinioClient;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.annotation.Bean;
-import org.springframework.integration.channel.DefaultHeaderChannelRegistry;
-import org.springframework.integration.channel.PublishSubscribeChannel;
-import org.springframework.stereotype.Component;
-
-/**
- * @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 = SpringTool.getYmlInfo("minio.endpoint");
-        accessKey = SpringTool.getYmlInfo("minio.accessKey");
-        secretKey = SpringTool.getYmlInfo("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;
-    }
-
-
-    @Bean
-    public PublishSubscribeChannel errorChannel() {
-        return new PublishSubscribeChannel();
-    }
-    @Bean
-    public DefaultHeaderChannelRegistry integrationHeaderChannelRegistry() {
-        return new DefaultHeaderChannelRegistry();
-    }
-}
-
diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
index 68eda58..d0cae9d 100644
--- a/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
+++ b/src/main/java/com/ard/utils/hiksdk/service/impl/FMSGCallBack.java
@@ -6,17 +6,16 @@
 import com.ard.alarm.camera.service.IArdCamerasService;
 import com.ard.alarm.external.domain.ArdEquipExternal;
 import com.ard.alarm.external.service.IArdEquipExternalService;
-import com.ard.config.MinioClientSingleton;
+import com.ard.utils.minio.MinioUtils;
 import com.ard.utils.other.ByteUtils;
 import com.ard.utils.hiksdk.common.GlobalVariable;
 import com.ard.utils.hiksdk.domain.AccessControlHostEventInfo;
 import com.ard.utils.hiksdk.domain.CameraEventInfo;
 import com.ard.utils.hiksdk.domain.ExternalAlarmEventInfo;
 import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
-import com.ard.utils.hiksdk.util.minio.MinioUtils;
 import com.ard.utils.other.DateUtils;
-import com.ard.utils.other.SpringTool;
 import com.ard.utils.mqtt.MqttConsumer;
+import com.ard.utils.spring.SpringUtils;
 import com.ard.utils.uuid.IdUtils;
 import com.sun.jna.Pointer;
 import lombok.extern.slf4j.Slf4j;
@@ -61,7 +60,7 @@
                 ArdCameras ardCameras = new ArdCameras();
                 ardCameras.setIp(sDeviceIP);
                 ardCameras.setPort(wLinkPort);
-                IArdCamerasService ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class);
+                IArdCamerasService ardCamerasService = SpringUtils.getBean(IArdCamerasService.class);
                 ArdCameras camera = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
                 HCNetSDK.NET_DVR_ALARMINFO_V30 netDvrAlarminfoV30 = new HCNetSDK.NET_DVR_ALARMINFO_V30();
                 netDvrAlarminfoV30.write();
@@ -95,7 +94,7 @@
                 ardCameras = new ArdCameras();
                 ardCameras.setIp(sDeviceIP);
                 ardCameras.setPort(wLinkPort);
-                ardCamerasService = SpringTool.getApplicationContext().getBean(IArdCamerasService.class);
+                ardCamerasService = SpringUtils.getBean(IArdCamerasService.class);
                 ArdCameras ardCamera = ardCamerasService.selectArdCamerasList(ardCameras).get(0);
 
                 HCNetSDK.NET_VCA_RULE_ALARM strVcaAlarm = new HCNetSDK.NET_VCA_RULE_ALARM();
@@ -190,7 +189,7 @@
                 ArdEquipExternal ardEquipExternal = new ArdEquipExternal();
                 ardEquipExternal.setIp(sDeviceIP);
                 ardEquipExternal.setPort(wLinkPort);
-                IArdEquipExternalService ardEquipExternalService = SpringTool.getApplicationContext().getBean(IArdEquipExternalService.class);
+                IArdEquipExternalService ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class);
                 ardEquipExternal = ardEquipExternalService.selectArdEquipExternal(ardEquipExternal);
 
 
@@ -276,7 +275,7 @@
                 ArdEquipExternal accessControlHost = new ArdEquipExternal();
                 accessControlHost.setIp(sDeviceIP);
                 accessControlHost.setPort(wLinkPort);
-                ardEquipExternalService = SpringTool.getApplicationContext().getBean(IArdEquipExternalService.class);
+                ardEquipExternalService = SpringUtils.getBean(IArdEquipExternalService.class);
                 accessControlHost = ardEquipExternalService.selectArdEquipExternal(accessControlHost);
 
                 HCNetSDK.NET_DVR_ACS_ALARM_INFO strACSInfo = new HCNetSDK.NET_DVR_ACS_ALARM_INFO();
@@ -322,9 +321,10 @@
                         InputStream input = new ByteArrayInputStream(bytes);
                         String bucketName = "pic";
                         String objectName = "alarm/" + IdUtils.simpleUUID() + ".jpeg";
-                        boolean uploadObject = MinioUtils.uploadObject(bucketName, objectName, input, "image/JPEG");
+                        MinioUtils minioUtil = SpringUtils.getBean(MinioUtils.class);
+                        boolean uploadObject = minioUtil.uploadObject(bucketName, objectName, input,input.available(), "image/JPEG");
                         if (uploadObject) {
-                            url = MinioClientSingleton.domainUrl + "/" + bucketName + "/" + objectName;
+                            url = minioUtil.getBucketObjectUrl(bucketName, objectName);
                             //log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
                         }
                     } catch (Exception e) {
diff --git a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
index 92b0b37..2bb03b3 100644
--- a/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
+++ b/src/main/java/com/ard/utils/hiksdk/service/impl/HikClientUtil.java
@@ -3,12 +3,12 @@
 import com.ard.alarm.camera.domain.ArdCameras;
 import com.ard.alarm.camera.domain.CameraCmd;
 import com.ard.alarm.external.domain.ArdEquipExternal;
-import com.ard.config.MinioClientSingleton;
+import com.ard.utils.minio.MinioUtils;
 import com.ard.utils.other.ByteUtils;
 import com.ard.utils.hiksdk.common.GlobalVariable;
 import com.ard.utils.hiksdk.domain.DeviceInfo;
 import com.ard.utils.hiksdk.util.hikSdkUtil.HCNetSDK;
-import com.ard.utils.hiksdk.util.minio.MinioUtils;
+import com.ard.utils.spring.SpringUtils;
 import com.sun.jna.Native;
 import com.sun.jna.Platform;
 import com.sun.jna.Pointer;
@@ -434,11 +434,10 @@
             InputStream input = new ByteArrayInputStream(array);
             String url = "";
             try {
-                boolean b = MinioUtils.uploadObject(cmd.getBucketName(), cmd.getObjectName(), input, ContentType);
+                MinioUtils minioUtil = SpringUtils.getBean(MinioUtils.class);
+                boolean b = minioUtil.uploadObject(cmd.getBucketName(), cmd.getObjectName(), input,input.available(), ContentType);
                 if (b) {
-                    // url = MinioUtils.getBucketObjectUrl(cmd.getBucketName(), cmd.getObjectName());
-                    // url = url.indexOf('?') != -1 ? url.substring(0, url.indexOf('?')) : url;
-                    url = MinioClientSingleton.domainUrl + "/" + cmd.getBucketName() + "/" + cmd.getObjectName();
+                    url = minioUtil.getBucketObjectUrl(cmd.getBucketName(), cmd.getObjectName());
                    // log.debug("涓婁紶鏂囦欢鎴愬姛!" + url);
                 }
             } catch (Exception ex) {
diff --git a/src/main/java/com/ard/utils/hiksdk/util/minio/MinioUtils.java b/src/main/java/com/ard/utils/hiksdk/util/minio/MinioUtils.java
deleted file mode 100644
index 0e600e0..0000000
--- a/src/main/java/com/ard/utils/hiksdk/util/minio/MinioUtils.java
+++ /dev/null
@@ -1,477 +0,0 @@
-package com.ard.utils.hiksdk.util.minio;
-
-import com.ard.config.MinioClientSingleton;
-import io.minio.*;
-import io.minio.http.Method;
-import io.minio.messages.Bucket;
-import io.minio.messages.DeleteError;
-import io.minio.messages.DeleteObject;
-import io.minio.messages.Item;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.multipart.MultipartFile;
-import java.io.*;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @Description: Minio瀹㈡埛绔伐鍏风被
- * @ClassName: MinioUtils
- * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�05鏈�18鏃�9:34
- * @Version: 1.0
- **/
-@SuppressWarnings("ALL")
-@Slf4j(topic = "minio")
-public class MinioUtils {
-
-    /**
-     * 鍒ゆ柇妗舵槸鍚﹀瓨鍦�
-     */
-    public static boolean exitsBucket(String bucketName) {
-        boolean found = false;
-        try {
-            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
-            found = MinioClientSingleton.getMinioClient().bucketExists(bucketExistsArgs);
-        } catch (Exception ex) {
-            log.error("minio鍒ゆ柇妗跺瓨鍦ㄥ紓甯革細", ex.getMessage());
-        }
-        return found;
-    }
-
-    /**
-     * 鍒涘缓妗�,骞惰缃《绛栫暐涓哄叕鍏�
-     */
-    public static boolean createBucket(String bucketName) {
-        try {
-            /*鍒涘缓妗�*/
-            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
-            MinioClientSingleton.getMinioClient().makeBucket(makeBucketArgs);
-            /*璁剧疆绛栫暐*/
-            String sb = "{\"Version\":\"2012-10-17\"," +
-                    "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" +
-                    "{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," +
-                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucketName +
-                    "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" +
-                    bucketName + "/*\"]}]}";
-            SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
-                    .bucket(bucketName)
-                    .config(sb)
-                    .build();
-            MinioClientSingleton.getMinioClient().setBucketPolicy(setBucketPolicyArgs);
-            return true;
-        } catch (Exception ex) {
-            log.error("minio鍒涘缓妗跺紓甯革細", ex.getMessage());
-            return false;
-        }
-    }
-
-    /**
-     * 鍒犻櫎涓�涓《
-     *
-     * @param bucket 妗跺悕绉�
-     */
-    public static boolean removeBucket(String bucket) {
-        try {
-            boolean found = exitsBucket(bucket);
-            if (found) {
-                Iterable<Result<Item>> myObjects = MinioClientSingleton.getMinioClient().listObjects(ListObjectsArgs.builder().bucket(bucket).build());
-                for (Result<Item> result : myObjects) {
-                    Item item = result.get();
-                    //鏈夊璞℃枃浠讹紝鍒欏垹闄ゅけ璐�
-                    if (item.size() > 0) {
-                        return false;
-                    }
-                }
-                // 鍒犻櫎`bucketName`瀛樺偍妗讹紝娉ㄦ剰锛屽彧鏈夊瓨鍌ㄦ《涓虹┖鏃舵墠鑳藉垹闄ゆ垚鍔熴��
-                MinioClientSingleton.getMinioClient().removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());
-                found = exitsBucket(bucket);
-                return !found;
-            }
-        } catch (Exception ex) {
-            log.error("鍒犻櫎妗跺紓甯革細" + ex.getMessage());
-        }
-        return false;
-    }
-
-    /**
-     * 鏌ヨ鎵�鏈夋《鏂囦欢
-     *
-     * @return
-     */
-    public static List<Bucket> getListBuckets() {
-        try {
-            return MinioClientSingleton.getMinioClient().listBuckets();
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return Collections.emptyList();
-    }
-
-    /**
-     * 鐢熸垚涓�涓狦ET璇锋眰鐨勫甫鏈夊け鏁堟椂闂寸殑鍒嗕韩閾炬帴銆�
-     * 澶辨晥鏃堕棿榛樿鏄�7澶┿��
-     *
-     * @param bucketName 瀛樺偍妗跺悕绉�
-     * @param objectName 瀛樺偍妗堕噷鐨勫璞″悕绉�
-     * @param expires    澶辨晥鏃堕棿锛堜互绉掍负鍗曚綅锛夛紝榛樿鏄�7澶╋紝涓嶅緱澶т簬涓冨ぉ
-     * @return
-     */
-    public static String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
-        String url = "";
-        if (exitsBucket(bucketName)) {
-            try {
-                GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
-                        .method(Method.GET)
-                        .bucket(bucketName)
-                        .object(objectName)
-                        .expiry(expires, timeUnit)
-                        .build();
-                url = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
-            } catch (Exception ex) {
-                log.error("minio鐢熸垚澶辨晥url寮傚父", ex.getMessage());
-            }
-        }
-        return url;
-    }
-
-    /**
-     * @鎻忚堪 涓婁紶MultipartFile鏂囦欢杩斿洖url
-     * @鍙傛暟 [bucketName, file]
-     * @杩斿洖鍊� java.lang.String
-     * @鍒涘缓浜� 鍒樿嫃涔�
-     * @鍒涘缓鏃堕棿 2023/5/18 12:16
-     * @淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    public static String putObjectAndGetUrl(String bucketName, MultipartFile file) {
-        //鍒ゆ柇鏂囦欢鏄惁涓虹┖
-        if (null == file || 0 == file.getSize()) {
-            log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖");
-        }
-        boolean exsit = exitsBucket(bucketName);
-        if (!exsit) {
-            log.error(bucketName + "-妗朵笉瀛樺湪");
-        }
-        //鏂囦欢鍚�
-        String originalFilename = file.getOriginalFilename();
-        //鏂扮殑鏂囦欢鍚�
-        String fileName = UUID.randomUUID().toString().replace("-", "") +"_"+ originalFilename;
-        try {
-            InputStream inputStream = file.getInputStream();
-            /*涓婁紶瀵硅薄*/
-            PutObjectArgs putObjectArgs = PutObjectArgs
-                    .builder()
-                    .bucket(bucketName)
-                    .object(fileName)
-                    .stream(inputStream, file.getSize(), -1)
-                    .contentType(file.getContentType())
-                    .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
-            inputStream.close();
-            /*鑾峰彇url*/
-            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
-                    .builder()
-                    .method(Method.GET)
-                    .bucket(bucketName)
-                    .object(fileName)
-                    .build();
-            String presignedObjectUrl = MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
-            String ObjectUrl  = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
-            return ObjectUrl;
-        } catch (Exception ex) {
-            log.error("涓婁紶瀵硅薄杩斿洖url寮傚父锛�" + ex.getMessage());
-        }
-        return "";
-    }
-
-    /**
-     * 鍒犻櫎鏂囦欢
-     *
-     * @param bucket     妗跺悕绉�
-     * @param objectName 瀵硅薄鍚嶇О
-     * @return boolean
-     */
-    public static 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);
-                return true;
-            }
-        } catch (Exception e) {
-            log.error("removeObject", e);
-        }
-        return false;
-    }
-
-    /**
-     * 鎵归噺鍒犻櫎鏂囦欢
-     *
-     * @param objectNames 瀵硅薄鍚嶇О
-     * @return boolean
-     */
-    public static boolean removeObjects(String bucket, List<String> objectNames) {
-        if (exitsBucket(bucket)) {
-            try {
-                List<DeleteObject> objects = new LinkedList<>();
-                for (String str : objectNames) {
-                    objects.add(new DeleteObject(str));
-                }
-                RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build();
-                Iterable<Result<DeleteError>> results = MinioClientSingleton.getMinioClient().removeObjects(removeObjectsArgs);
-                /*鍒犻櫎瀹岄亶鍘嗙粨鏋滐紝鍚﹀垯鍒犱笉鎺�*/
-                for (Result<DeleteError> result : results) {
-                    DeleteError error = result.get();
-                    log.error("Error in deleting object " + error.objectName() + "; " + error.message());
-                }
-
-                return true;
-            } catch (Exception ex) {
-                log.error("minio鎵归噺鍒犻櫎鏂囦欢寮傚父", ex.getMessage());
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 鑾峰彇鍗曚釜妗朵腑鐨勬墍鏈夋枃浠跺璞″悕绉�
-     *
-     * @param bucket 妗跺悕绉�
-     * @return {@link List}<{@link String}>
-     */
-    public static 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);
-                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;
-    }
-
-    /**
-     * 鑾峰彇鏌愪釜妗朵笅鏌愪釜瀵硅薄鐨刄RL
-     *
-     * @param bucket     妗跺悕绉�
-     * @param objectName 瀵硅薄鍚� (鏂囦欢澶瑰悕 + 鏂囦欢鍚�)
-     * @return
-     */
-    public static String getBucketObjectUrl(String bucketName, String objectName) {
-        try {
-            if (!exitsBucket(bucketName)) {
-                return "";
-            }
-            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
-                    .builder()
-                    .bucket(bucketName)
-                    .object(objectName)
-                    .method(Method.GET)
-                    .build();
-            return MinioClientSingleton.getMinioClient().getPresignedObjectUrl(getPresignedObjectUrlArgs);
-        } catch (Exception ex) {
-            log.error("minio鑾峰彇瀵硅薄URL寮傚父" + ex.getMessage());
-        }
-        return "";
-    }
-
-    /**
-     * 涓婁紶瀵硅薄-stream
-     *
-     * @param bucketName  bucket鍚嶇О
-     * @param objectName  饨備欢鍚嶇О
-     * @param stream      饨備欢娴�
-     * @param size        饧も缉
-     * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
-     */
-    public static boolean uploadObject(String bucketName, String objectName, InputStream stream, String contextType) {
-        try {
-            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
-                    .stream(stream, stream.available(), -1)
-                    .contentType(contextType)
-                    .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
-            return true;
-        } catch (Exception ex) {
-            log.error("minio涓婁紶鏂囦欢(閫氳繃stream)寮傚父" + ex.getMessage());
-            return false;
-        }
-    }
-
-    /**
-     * 涓婁紶瀵硅薄-File
-     *
-     * @param bucketName  bucket鍚嶇О
-     * @param objectName  饨備欢鍚嶇О
-     * @param file        饨備欢
-     * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
-     */
-    public static boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
-        try {
-            FileInputStream fileInputStream = new FileInputStream(file);
-            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
-                    .stream(fileInputStream, file.length(), -1)
-                    .contentType(contextType)
-                    .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
-            return true;
-        } catch (Exception ex) {
-            log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
-            return false;
-        }
-    }
-
-    /**
-     * 涓婁紶瀵硅薄-MultipartFile
-     *
-     * @param bucketName    bucket鍚嶇О
-     * @param objectName    饨備欢鍚嶇О
-     * @param MultipartFile 饨備欢
-     * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
-     */
-    public static boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
-        try {
-            if (bucketName.isEmpty()) {
-                log.error("bucket鍚嶇О涓虹┖");
-                return false;
-            }
-            if (objectName.isEmpty()) {
-                log.error("瀵硅薄鍚嶇О涓虹┖");
-                return false;
-            }
-            InputStream inputStream = multipartFile.getInputStream();
-            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
-                    .stream(inputStream, multipartFile.getSize(), -1)
-                    .contentType(contextType)
-                    .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
-            return true;
-        } catch (Exception ex) {
-            log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
-            return false;
-        }
-    }
-
-    /**
-     * 涓婁紶瀵硅薄,鐢╩ultipartFile鍚嶇О浣滀负瀵硅薄鍚�
-     *
-     * @param bucketName    bucket鍚嶇О
-     * @param objectName    饨備欢鍚嶇О
-     * @param MultipartFile 饨備欢
-     * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
-     */
-    public static boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
-        try {
-            if (multipartFile == null) {
-                log.error("涓婁紶鏂囦欢涓虹┖");
-                return false;
-            }
-            String objectName = multipartFile.getOriginalFilename();
-            InputStream inputStream = multipartFile.getInputStream();
-            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
-                    .bucket(bucketName)
-                    .object(objectName)
-                    .stream(inputStream, multipartFile.getSize(), -1)
-                    .contentType(contextType)
-                    .build();
-            MinioClientSingleton.getMinioClient().putObject(putObjectArgs);
-            return true;
-        } catch (Exception ex) {
-            log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
-            return false;
-        }
-    }
-
-    /**
-     * 涓婁紶瀵硅薄-閫氳繃鏈湴璺緞
-     *
-     * @param bulkName
-     * @param objectName
-     * @param localFilePathName
-     * @return
-     */
-    public static boolean uploadObject(String bulkName, String objectName, String localFilePathName, String contextType) {
-        try {
-            if (!exitsBucket(bulkName)) {
-                log.debug(bulkName + "涓嶅瓨鍦�");
-                return false;
-            }
-            File file = new File(localFilePathName);
-            if (!file.exists()) {
-                log.debug("鏂囦欢涓嶅瓨鍦�");
-                return false;
-            }
-            UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
-                    .bucket(bulkName)
-                    .object(objectName)
-                    .filename(localFilePathName)
-                    .contentType(contextType)
-                    .build();
-            ObjectWriteResponse objectWriteResponse = MinioClientSingleton.getMinioClient().uploadObject(uploadObjectArgs);
-            return true;
-        } catch (Exception e) {
-            log.error("minio upload object file error " + e.getMessage());
-            return false;
-        }
-    }
-    /**
-     *@鎻忚堪 鑾峰彇妗朵腑鎵�鏈夊璞�
-     *@鍙傛暟 [bucketName]
-     *@杩斿洖鍊� java.lang.Iterable<io.minio.Result<io.minio.messages.Item>>
-     *@鍒涘缓浜� 鍒樿嫃涔�
-     *@鍒涘缓鏃堕棿 2023/2/6 10:32
-     *@淇敼浜哄拰鍏跺畠淇℃伅
-     */
-    public static Iterable<Result<Item>> getObjectsByBucket(String bucketName)  {
-        Iterable<Result<Item>> listObjects = MinioClientSingleton.getMinioClient().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;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/com/ard/utils/minio/MinioConfig.java b/src/main/java/com/ard/utils/minio/MinioConfig.java
new file mode 100644
index 0000000..d5dada5
--- /dev/null
+++ b/src/main/java/com/ard/utils/minio/MinioConfig.java
@@ -0,0 +1,33 @@
+package com.ard.utils.minio;
+
+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("${spring.minio.endpoint}")
+    private  String endpoint;
+    @Value("${spring.minio.accessKey}")
+    private  String accessKey;
+    @Value("${spring.minio.secretKey}")
+    private  String secretKey;
+
+    @Bean
+    public io.minio.MinioClient getMinioClient() {
+        return io.minio.MinioClient.builder()
+                .endpoint(endpoint)
+                .credentials(accessKey, secretKey)
+                .build();
+    }
+}
+
diff --git a/src/main/java/com/ard/utils/minio/MinioUtils.java b/src/main/java/com/ard/utils/minio/MinioUtils.java
new file mode 100644
index 0000000..d7e5e27
--- /dev/null
+++ b/src/main/java/com/ard/utils/minio/MinioUtils.java
@@ -0,0 +1,592 @@
+package com.ard.utils.minio;
+
+import com.ard.utils.other.StringUtils;
+import com.ard.utils.uuid.IdUtils;
+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.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @Description: Minio瀹㈡埛绔伐鍏风被
+ * @ClassName: MinioUtils
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�05鏈�18鏃�9:34
+ * @Version: 1.0
+ **/
+@SuppressWarnings("ALL")
+@Slf4j(topic = "minio")
+@Component
+public class MinioUtils {
+
+    @Resource
+    MinioClient minioClient;
+
+    /**
+     * 鍒ゆ柇妗舵槸鍚﹀瓨鍦�
+     */
+    public boolean exitsBucket(String bucketName) {
+        boolean found = false;
+        try {
+            if (StringUtils.isEmpty(bucketName)) {
+                return false;
+            }
+            BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build();
+            found = minioClient.bucketExists(bucketExistsArgs);
+
+        } catch (Exception ex) {
+            log.error("minio鍒ゆ柇妗跺瓨鍦ㄥ紓甯革細", ex.getMessage());
+        }
+        return found;
+    }
+
+    /**
+     * 鍒涘缓妗�,骞惰缃《绛栫暐涓哄叕鍏�
+     */
+    public boolean createBucket(String bucketName) {
+        try {
+            if (StringUtils.isEmpty(bucketName)) {
+                return false;
+            }
+            /*鍒涘缓妗�*/
+            MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build();
+            minioClient.makeBucket(makeBucketArgs);
+            /*璁剧疆绛栫暐*/
+            String sb = "{\"Version\":\"2012-10-17\"," +
+                    "\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":" +
+                    "{\"AWS\":[\"*\"]},\"Action\":[\"s3:ListBucket\",\"s3:ListBucketMultipartUploads\"," +
+                    "\"s3:GetBucketLocation\"],\"Resource\":[\"arn:aws:s3:::" + bucketName +
+                    "\"]},{\"Effect\":\"Allow\",\"Principal\":{\"AWS\":[\"*\"]},\"Action\":[\"s3:PutObject\",\"s3:AbortMultipartUpload\",\"s3:DeleteObject\",\"s3:GetObject\",\"s3:ListMultipartUploadParts\"],\"Resource\":[\"arn:aws:s3:::" +
+                    bucketName + "/*\"]}]}";
+            SetBucketPolicyArgs setBucketPolicyArgs = SetBucketPolicyArgs.builder()
+                    .bucket(bucketName)
+                    .config(sb)
+                    .build();
+            /*璁剧疆閫氱煡mqtt*/
+            //璁剧疆mqtt涓婚
+            NotificationConfiguration config = new NotificationConfiguration();
+            List<QueueConfiguration> queueConfigurations = new ArrayList<>();
+            QueueConfiguration queueConfiguration = new QueueConfiguration();
+            queueConfiguration.setQueue("arn:minio:sqs::_:mqtt");
+
+            //璁剧疆浜嬩欢
+            List<EventType> events = new ArrayList<>();
+            events.add(EventType.OBJECT_REMOVED_ANY);
+            events.add(EventType.OBJECT_CREATED_ANY);
+            queueConfiguration.setEvents(events);
+
+            queueConfigurations.add(queueConfiguration);
+            config.setQueueConfigurationList(queueConfigurations);
+            SetBucketNotificationArgs setBucketNotificationArgs = SetBucketNotificationArgs.builder()
+                    .bucket(bucketName)
+                    .config(config).build();
+            minioClient.setBucketPolicy(setBucketPolicyArgs);
+            minioClient.setBucketNotification(setBucketNotificationArgs);
+
+            return true;
+        } catch (Exception ex) {
+            log.error("minio鍒涘缓妗跺紓甯革細", ex.getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * 鍒犻櫎涓�涓《
+     *
+     * @param bucket 妗跺悕绉�
+     */
+    public boolean removeBucket(String bucket) {
+        try {
+            boolean found = exitsBucket(bucket);
+            if (found) {
+                Iterable<Result<Item>> myObjects = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucket).build());
+                for (Result<Item> result : myObjects) {
+                    Item item = result.get();
+                    //鏈夊璞℃枃浠讹紝鍒欏垹闄ゅけ璐�
+                    if (item.size() > 0) {
+                        return false;
+                    }
+                }
+                // 鍒犻櫎`bucketName`瀛樺偍妗讹紝娉ㄦ剰锛屽彧鏈夊瓨鍌ㄦ《涓虹┖鏃舵墠鑳藉垹闄ゆ垚鍔熴��
+                minioClient.removeBucket(RemoveBucketArgs.builder().bucket(bucket).build());
+                found = exitsBucket(bucket);
+                return !found;
+            }
+        } catch (Exception ex) {
+            log.error("鍒犻櫎妗跺紓甯革細" + ex.getMessage());
+        }
+        return false;
+    }
+
+    /**
+     * 鏌ヨ鎵�鏈夋《鏂囦欢
+     *
+     * @return
+     */
+    public List<Bucket> getListBuckets() {
+        try {
+            return minioClient.listBuckets();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return Collections.emptyList();
+    }
+
+    /**
+     * 鐢熸垚涓�涓狦ET璇锋眰鐨勫甫鏈夊け鏁堟椂闂寸殑鍒嗕韩閾炬帴銆�
+     * 澶辨晥鏃堕棿榛樿鏄�7澶┿��
+     *
+     * @param bucketName 瀛樺偍妗跺悕绉�
+     * @param objectName 瀛樺偍妗堕噷鐨勫璞″悕绉�
+     * @param expires    澶辨晥鏃堕棿锛堜互绉掍负鍗曚綅锛夛紝榛樿鏄�7澶╋紝涓嶅緱澶т簬涓冨ぉ
+     * @return
+     */
+    public String getObjectWithExpired(String bucketName, String objectName, Integer expires, TimeUnit timeUnit) {
+        String url = "";
+        if (exitsBucket(bucketName)) {
+            try {
+                GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs.builder()
+                        .method(Method.GET)
+                        .bucket(bucketName)
+                        .object(objectName)
+                        .expiry(expires, timeUnit)
+                        .build();
+                url = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            } catch (Exception ex) {
+                log.error("minio鐢熸垚澶辨晥url寮傚父", ex.getMessage());
+            }
+        } else {
+            createBucket(bucketName);
+        }
+        return url;
+    }
+
+    /**
+     * @鎻忚堪 涓婁紶MultipartFile鏂囦欢杩斿洖url
+     * @鍙傛暟 [bucketName, file]
+     * @杩斿洖鍊� java.lang.String
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/5/18 12:16
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    public String putObjectAndGetUrl(String bucketName, MultipartFile file) {
+        if (!exitsBucket(bucketName)) {
+            createBucket(bucketName);
+        }
+        //鍒ゆ柇鏂囦欢鏄惁涓虹┖
+        if (null == file || 0 == file.getSize()) {
+            log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖");
+        }
+        boolean exsit = exitsBucket(bucketName);
+        if (!exsit) {
+            boolean bucket = createBucket(bucketName);
+            if (bucket) {
+                log.info(bucketName + "-妗朵笉瀛樺湪,鎴愬姛鍒涘缓妗�");
+            }
+        }
+        //鏂囦欢鍚�
+        String originalFilename = file.getOriginalFilename();
+        //鏂扮殑鏂囦欢鍚�
+        String fileName = IdUtils.fastSimpleUUID() + "_" + originalFilename;
+        try {
+            InputStream inputStream = file.getInputStream();
+            /*涓婁紶瀵硅薄*/
+            PutObjectArgs putObjectArgs = PutObjectArgs
+                    .builder()
+                    .bucket(bucketName)
+                    .object(fileName)
+                    .stream(inputStream, file.getSize(), -1)
+                    .contentType(file.getContentType())
+                    .build();
+            minioClient.putObject(putObjectArgs);
+            inputStream.close();
+            /*鑾峰彇url*/
+            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
+                    .builder()
+                    .bucket(bucketName)
+                    .object(fileName)
+                    .method(Method.GET)
+                    .build();
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            return ObjectUrl;
+        } catch (Exception ex) {
+            log.error("涓婁紶瀵硅薄杩斿洖url寮傚父锛�" + ex.getMessage());
+        }
+        return "";
+    }
+
+    /**
+     * @鎻忚堪 涓婁紶MultipartFile鏂囦欢杩斿洖url
+     * @鍙傛暟 [bucketName, file]
+     * @杩斿洖鍊� java.lang.String
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/5/18 12:16
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    public String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) {
+        if (!exitsBucket(bucketName)) {
+            createBucket(bucketName);
+        }
+        //鍒ゆ柇鏂囦欢鏄惁涓虹┖
+        if (null == file || 0 == file.getSize()) {
+            log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖");
+        }
+        boolean exsit = exitsBucket(bucketName);
+        if (!exsit) {
+            boolean bucket = createBucket(bucketName);
+            if (bucket) {
+                log.info(bucketName + "-妗朵笉瀛樺湪,鎴愬姛鍒涘缓妗�");
+            }
+        }
+        //鏂囦欢鍚�
+        String originalFilename = file.getOriginalFilename();
+        //鏂扮殑鏂囦欢鍚�
+        String fileName = folder + "/" + IdUtils.fastSimpleUUID() + "_" + originalFilename;
+        try {
+            InputStream inputStream = file.getInputStream();
+            /*涓婁紶瀵硅薄*/
+            PutObjectArgs putObjectArgs = PutObjectArgs
+                    .builder()
+                    .bucket(bucketName)
+                    .object(fileName)
+                    .stream(inputStream, file.getSize(), -1)
+                    .contentType(file.getContentType())
+                    .build();
+            minioClient.putObject(putObjectArgs);
+            inputStream.close();
+            /*鑾峰彇url*/
+            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
+                    .builder()
+                    .bucket(bucketName)
+                    .object(fileName)
+                    .method(Method.GET)
+                    .build();
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            return ObjectUrl;
+        } catch (Exception ex) {
+            log.error("涓婁紶瀵硅薄杩斿洖url寮傚父锛�" + ex.getMessage());
+        }
+        return "";
+    }
+
+    /**
+     * 鍒犻櫎鏂囦欢
+     *
+     * @param bucket     妗跺悕绉�
+     * @param objectName 瀵硅薄鍚嶇О
+     * @return boolean
+     */
+    public boolean removeObject(String bucket, String objectName) {
+        try {
+            boolean exsit = exitsBucket(bucket);
+            if (exsit) {
+                RemoveObjectArgs removeObjectArgs = RemoveObjectArgs.builder().bucket(bucket).object(objectName).build();
+                minioClient.removeObject(removeObjectArgs);
+                return true;
+            }
+        } catch (Exception e) {
+            log.error("removeObject", e);
+        }
+        return false;
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎鏂囦欢
+     *
+     * @param objectNames 瀵硅薄鍚嶇О
+     * @return boolean
+     */
+    public boolean removeObjects(String bucket, List<String> objectNames) {
+        if (exitsBucket(bucket)) {
+            try {
+                List<DeleteObject> objects = new LinkedList<>();
+                for (String str : objectNames) {
+                    objects.add(new DeleteObject(str));
+                }
+                RemoveObjectsArgs removeObjectsArgs = RemoveObjectsArgs.builder().bucket(bucket).objects(objects).build();
+                Iterable<Result<DeleteError>> results = minioClient.removeObjects(removeObjectsArgs);
+                /*鍒犻櫎瀹岄亶鍘嗙粨鏋滐紝鍚﹀垯鍒犱笉鎺�*/
+                for (Result<DeleteError> result : results) {
+                    DeleteError error = result.get();
+                    log.error("Error in deleting object " + error.objectName() + "; " + error.message());
+                }
+
+                return true;
+            } catch (Exception ex) {
+                log.error("minio鎵归噺鍒犻櫎鏂囦欢寮傚父", ex.getMessage());
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鑾峰彇鍗曚釜妗朵腑鐨勬墍鏈夋枃浠跺璞″悕绉�
+     *
+     * @param bucket 妗跺悕绉�
+     * @return {@link List}<{@link String}>
+     */
+    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 = 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());
+                }
+                return listObjetcName;
+            } catch (Exception ex) {
+                log.error("minio鑾峰彇妗朵笅瀵硅薄寮傚父锛�" + ex.getMessage());
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 鑾峰彇鏌愪釜妗朵笅鏌愪釜瀵硅薄鐨刄RL
+     *
+     * @param bucket     妗跺悕绉�
+     * @param objectName 瀵硅薄鍚� (鏂囦欢澶瑰悕 + 鏂囦欢鍚�)
+     * @return
+     */
+    public String getBucketObjectUrl(String bucketName, String objectName) {
+        try {
+            if (!exitsBucket(bucketName)) {
+                return "";
+            }
+            GetPresignedObjectUrlArgs getPresignedObjectUrlArgs = GetPresignedObjectUrlArgs
+                    .builder()
+                    .bucket(bucketName)
+                    .object(objectName)
+                    .method(Method.GET)
+                    .build();
+            String presignedObjectUrl = minioClient.getPresignedObjectUrl(getPresignedObjectUrlArgs);
+            String ObjectUrl = presignedObjectUrl.substring(0, presignedObjectUrl.indexOf("?"));
+            return ObjectUrl;
+        } catch (Exception ex) {
+            log.error("minio鑾峰彇瀵硅薄URL寮傚父" + ex.getMessage());
+        }
+        return "";
+    }
+
+    /**
+     * 涓婁紶瀵硅薄-stream
+     *
+     * @param bucketName  bucket鍚嶇О
+     * @param objectName  饨備欢鍚嶇О
+     * @param stream      饨備欢娴�
+     * @param size        饧も缉
+     * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
+     */
+    public boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) {
+        try {
+            if (!exitsBucket(bucketName)) {
+                createBucket(bucketName);
+            }
+            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
+                    .bucket(bucketName)
+                    .object(objectName)
+                    .stream(stream, size, -1)
+                    .contentType(contextType)
+                    .build();
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
+            return true;
+        } catch (Exception ex) {
+            log.error("minio涓婁紶鏂囦欢(閫氳繃stream)寮傚父" + ex.getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * 涓婁紶瀵硅薄-File
+     *
+     * @param bucketName  bucket鍚嶇О
+     * @param objectName  饨備欢鍚嶇О
+     * @param file        饨備欢
+     * @param contextType 绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
+     */
+    public boolean uploadObject(String bucketName, String objectName, File file, String contextType) {
+        try {
+            if (!exitsBucket(bucketName)) {
+                createBucket(bucketName);
+            }
+            FileInputStream fileInputStream = new FileInputStream(file);
+            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
+                    .bucket(bucketName)
+                    .object(objectName)
+                    .stream(fileInputStream, file.length(), -1)
+                    .contentType(contextType)
+                    .build();
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
+            return true;
+        } catch (Exception ex) {
+            log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * 涓婁紶瀵硅薄-MultipartFile
+     *
+     * @param bucketName    bucket鍚嶇О
+     * @param objectName    饨備欢鍚嶇О
+     * @param MultipartFile 饨備欢
+     * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
+     */
+    public boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) {
+        try {
+            if (!exitsBucket(bucketName)) {
+                createBucket(bucketName);
+            }
+            InputStream inputStream = multipartFile.getInputStream();
+            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
+                    .bucket(bucketName)
+                    .object(objectName)
+                    .stream(inputStream, multipartFile.getSize(), -1)
+                    .contentType(contextType)
+                    .build();
+            ObjectWriteResponse objectWriteResponse = minioClient.putObject(putObjectArgs);
+            return true;
+        } catch (Exception ex) {
+            log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * 涓婁紶瀵硅薄,鐢╩ultipartFile鍚嶇О浣滀负瀵硅薄鍚�
+     *
+     * @param bucketName    bucket鍚嶇О
+     * @param objectName    饨備欢鍚嶇О
+     * @param MultipartFile 饨備欢
+     * @param contextType   绫诲瀷 Image/jpeg 娴忚鍣ㄥ彲浠ョ洿鎺ユ墦寮�锛屽惁鍒欎笅杞�
+     */
+    public boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) {
+        try {
+            if (!exitsBucket(bucketName)) {
+                createBucket(bucketName);
+            }
+            if (multipartFile == null) {
+                log.error("涓婁紶鏂囦欢涓虹┖");
+                return false;
+            }
+            String objectName = multipartFile.getOriginalFilename();
+            InputStream inputStream = multipartFile.getInputStream();
+            PutObjectArgs putObjectArgs = PutObjectArgs.builder()
+                    .bucket(bucketName)
+                    .object(objectName)
+                    .stream(inputStream, multipartFile.getSize(), -1)
+                    .contentType(contextType)
+                    .build();
+            minioClient.putObject(putObjectArgs);
+            return true;
+        } catch (Exception ex) {
+            log.error("minio涓婁紶鏂囦欢(閫氳繃File)寮傚父" + ex.getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * 涓婁紶瀵硅薄-閫氳繃鏈湴璺緞
+     *
+     * @param bulkName
+     * @param objectName
+     * @param localFilePathName
+     * @return
+     */
+    public boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) {
+        try {
+            if (!exitsBucket(bucketName)) {
+                createBucket(bucketName);
+            }
+            File file = new File(localFilePathName);
+            if (!file.exists()) {
+                log.debug("鏂囦欢涓嶅瓨鍦�");
+                return false;
+            }
+            UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder()
+                    .bucket(bucketName)
+                    .object(objectName)
+                    .filename(localFilePathName)
+                    .contentType(contextType)
+                    .build();
+            ObjectWriteResponse objectWriteResponse = minioClient.uploadObject(uploadObjectArgs);
+            return true;
+        } catch (Exception e) {
+            log.error("minio upload object file error " + e.getMessage());
+            return false;
+        }
+    }
+
+    /**
+     * @鎻忚堪 鑾峰彇妗朵腑鎵�鏈夊璞�
+     * @鍙傛暟 [bucketName]
+     * @杩斿洖鍊� java.lang.Iterable<io.minio.Result < io.minio.messages.Item>>
+     * @鍒涘缓浜� 鍒樿嫃涔�
+     * @鍒涘缓鏃堕棿 2023/2/6 10:32
+     * @淇敼浜哄拰鍏跺畠淇℃伅
+     */
+    public Iterable<Result<Item>> getObjectsByBucket(String bucketName) {
+        Iterable<Result<Item>> listObjects = minioClient.listObjects(ListObjectsArgs.builder()
+                .bucket(bucketName)
+                .recursive(true)
+                .build());
+        return listObjects;
+    }
+
+    /**
+     * @鎻忚堪 鑾峰彇妗朵腑鎵�鏈夊璞�
+     * @鍙傛暟 [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/src/main/java/com/ard/utils/mqtt/MqttConsumer.java b/src/main/java/com/ard/utils/mqtt/MqttConsumer.java
index 6c80d29..fc03b39 100644
--- a/src/main/java/com/ard/utils/mqtt/MqttConsumer.java
+++ b/src/main/java/com/ard/utils/mqtt/MqttConsumer.java
@@ -4,6 +4,7 @@
 import org.apache.commons.lang3.StringUtils;
 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.core.annotation.Order;
@@ -23,13 +24,29 @@
 @Slf4j(topic = "mqtt")
 @Order(1)
 public class MqttConsumer implements ApplicationRunner {
+    @Value("${spring.mqtt.enabled}")
+    private Boolean MQTT_ENABLED;
+    @Value("${spring.mqtt.topic}")
+    private String MQTT_TOPIC;
+    @Value("${spring.mqtt.host}")
+    private String MQTT_HOST;
+    @Value("${spring.mqtt.clientId}")
+    private String MQTT_CLIENT_ID;
+    @Value("${spring.mqtt.username}")
+    private String MQTT_USER_NAME;
+    @Value("${spring.mqtt.password}")
+    private String MQTT_PASSWORD;
+    @Value("${spring.mqtt.timeout}")
+    private int MQTT_TIMEOUT;
+    @Value("${spring.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();
         }
     }
@@ -43,7 +60,7 @@
             getClient();
             // 2 璁剧疆閰嶇疆
             MqttConnectOptions options = getOptions();
-            String[] topic = PropertiesUtil.MQTT_TOPIC.split(",");
+            String[] topic = MQTT_TOPIC.split(",");
             // 3 娑堟伅鍙戝竷璐ㄩ噺
             int[] qos = getQos(topic.length);
             // 4 鏈�鍚庤缃�
@@ -59,7 +76,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) {
@@ -73,12 +90,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/src/main/java/com/ard/utils/mqtt/MqttConsumerCallback.java b/src/main/java/com/ard/utils/mqtt/MqttConsumerCallback.java
index 20e9f7c..b0ee239 100644
--- a/src/main/java/com/ard/utils/mqtt/MqttConsumerCallback.java
+++ b/src/main/java/com/ard/utils/mqtt/MqttConsumerCallback.java
@@ -81,10 +81,10 @@
             if (null != topic && null != qos) {
                 if (client.isConnected()) {
                     client.subscribe(topic, qos);
-                    log.debug("mqtt杩炴帴鎴愬姛锛屽鎴风ID锛�" + PropertiesUtil.MQTT_CLIENT_ID);
+                    log.debug("mqtt杩炴帴鎴愬姛");
                     log.debug("--璁㈤槄涓婚:锛�" + Arrays.toString(topic));
                 } else {
-                    log.debug("mqtt杩炴帴澶辫触锛屽鎴风ID锛�" + PropertiesUtil.MQTT_CLIENT_ID);
+                    log.debug("mqtt杩炴帴澶辫触");
                 }
             }
         } catch (Exception e) {
diff --git a/src/main/java/com/ard/utils/mqtt/PropertiesUtil.java b/src/main/java/com/ard/utils/mqtt/PropertiesUtil.java
deleted file mode 100644
index d53dc88..0000000
--- a/src/main/java/com/ard/utils/mqtt/PropertiesUtil.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package com.ard.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("spring.mqtt.host");
-        MQTT_CLIENT_ID = getYmlNew("spring.mqtt.clientId");
-        MQTT_USER_NAME = getYmlNew("spring.mqtt.username");
-        MQTT_PASSWORD = getYmlNew("spring.mqtt.password");
-        MQTT_TOPIC = getYmlNew("spring.mqtt.topic");
-        MQTT_TIMEOUT = Integer.valueOf(Objects.requireNonNull(getYmlNew("spring.mqtt.timeout")));
-        MQTT_KEEP_ALIVE = Integer.valueOf(Objects.requireNonNull(getYmlNew("spring.mqtt.keepalive")));
-        MQTT_ENABLED = Boolean.valueOf(getYmlNew("spring.mqtt.enabled"));
-    }
-
-    public static String getYmlNew(String key) {
-        Resource resource = new ClassPathResource("application.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/src/main/java/com/ard/utils/other/SpringTool.java b/src/main/java/com/ard/utils/other/SpringTool.java
deleted file mode 100644
index 1c0844d..0000000
--- a/src/main/java/com/ard/utils/other/SpringTool.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.ard.utils.other;
-
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-import org.springframework.core.io.ClassPathResource;
-import org.springframework.core.io.Resource;
-import org.springframework.stereotype.Component;
-
-import java.util.Properties;
-
-/**
- * @Description:
- * @ClassName: SpringTool
- * @Author: 鍒樿嫃涔�
- * @Date: 2023骞�06鏈�06鏃�9:14
- * @Version: 1.0
- **/
-@Component
-public class SpringTool implements ApplicationContextAware {
-
-    private static ApplicationContext applicationContext = null;
-
-    @Override
-    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
-        if (SpringTool.applicationContext == null) {
-            SpringTool.applicationContext = applicationContext;
-        }
-    }
-
-    //璇ユ柟娉曠敤浜庡鐣岃幏鍙朅pplicationContext瀵硅薄
-    public static ApplicationContext getApplicationContext() {
-        return applicationContext;
-    }
-
-    //璇ユ柟娉曠敤浜庡鐣岄�氳繃bean鐨勫悕瀛楄幏鍙朆ean瀵硅薄
-    public static Object getBean(String name) {
-        return getApplicationContext().getBean(name);
-    }
-
-    /*yml閰嶇疆淇℃伅鑾峰彇*/
-    public static String getYmlInfo(String key) {
-        Resource resource = new ClassPathResource("application.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();
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/com/ard/utils/other/StringUtils.java b/src/main/java/com/ard/utils/other/StringUtils.java
new file mode 100644
index 0000000..0980747
--- /dev/null
+++ b/src/main/java/com/ard/utils/other/StringUtils.java
@@ -0,0 +1,577 @@
+package com.ard.utils.other;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.springframework.util.AntPathMatcher;
+
+/**
+ * 瀛楃涓插伐鍏风被
+ * 
+ * @author ruoyi
+ */
+public class StringUtils extends org.apache.commons.lang3.StringUtils
+{
+    /** 绌哄瓧绗︿覆 */
+    private static final String NULLSTR = "";
+
+    /** 涓嬪垝绾� */
+    private static final char SEPARATOR = '_';
+
+    /**
+     * 鑾峰彇鍙傛暟涓嶄负绌哄��
+     * 
+     * @param value defaultValue 瑕佸垽鏂殑value
+     * @return value 杩斿洖鍊�
+     */
+    public static <T> T nvl(T value, T defaultValue)
+    {
+        return value != null ? value : defaultValue;
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狢ollection鏄惁涓虹┖锛� 鍖呭惈List锛孲et锛孮ueue
+     * 
+     * @param coll 瑕佸垽鏂殑Collection
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(Collection<?> coll)
+    {
+        return isNull(coll) || coll.isEmpty();
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狢ollection鏄惁闈炵┖锛屽寘鍚獿ist锛孲et锛孮ueue
+     * 
+     * @param coll 瑕佸垽鏂殑Collection
+     * @return true锛氶潪绌� false锛氱┖
+     */
+    public static boolean isNotEmpty(Collection<?> coll)
+    {
+        return !isEmpty(coll);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚︿负绌�
+     * 
+     * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
+     ** @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(Object[] objects)
+    {
+        return isNull(objects) || (objects.length == 0);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃暟缁勬槸鍚﹂潪绌�
+     * 
+     * @param objects 瑕佸垽鏂殑瀵硅薄鏁扮粍
+     * @return true锛氶潪绌� false锛氱┖
+     */
+    public static boolean isNotEmpty(Object[] objects)
+    {
+        return !isEmpty(objects);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
+     * 
+     * @param map 瑕佸垽鏂殑Map
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(Map<?, ?> map)
+    {
+        return isNull(map) || map.isEmpty();
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓狹ap鏄惁涓虹┖
+     * 
+     * @param map 瑕佸垽鏂殑Map
+     * @return true锛氶潪绌� false锛氱┖
+     */
+    public static boolean isNotEmpty(Map<?, ?> map)
+    {
+        return !isEmpty(map);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓虹┖涓�
+     * 
+     * @param str String
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isEmpty(String str)
+    {
+        return isNull(str) || NULLSTR.equals(str.trim());
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁涓洪潪绌轰覆
+     * 
+     * @param str String
+     * @return true锛氶潪绌轰覆 false锛氱┖涓�
+     */
+    public static boolean isNotEmpty(String str)
+    {
+        return !isEmpty(str);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃槸鍚︿负绌�
+     * 
+     * @param object Object
+     * @return true锛氫负绌� false锛氶潪绌�
+     */
+    public static boolean isNull(Object object)
+    {
+        return object == null;
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃槸鍚﹂潪绌�
+     * 
+     * @param object Object
+     * @return true锛氶潪绌� false锛氱┖
+     */
+    public static boolean isNotNull(Object object)
+    {
+        return !isNull(object);
+    }
+
+    /**
+     * * 鍒ゆ柇涓�涓璞℃槸鍚︽槸鏁扮粍绫诲瀷锛圝ava鍩烘湰鍨嬪埆鐨勬暟缁勶級
+     * 
+     * @param object 瀵硅薄
+     * @return true锛氭槸鏁扮粍 false锛氫笉鏄暟缁�
+     */
+    public static boolean isArray(Object object)
+    {
+        return isNotNull(object) && object.getClass().isArray();
+    }
+
+    /**
+     * 鍘荤┖鏍�
+     */
+    public static String trim(String str)
+    {
+        return (str == null ? "" : str.trim());
+    }
+
+    /**
+     * 鎴彇瀛楃涓�
+     * 
+     * @param str 瀛楃涓�
+     * @param start 寮�濮�
+     * @return 缁撴灉
+     */
+    public static String substring(final String str, int start)
+    {
+        if (str == null)
+        {
+            return NULLSTR;
+        }
+
+        if (start < 0)
+        {
+            start = str.length() + start;
+        }
+
+        if (start < 0)
+        {
+            start = 0;
+        }
+        if (start > str.length())
+        {
+            return NULLSTR;
+        }
+
+        return str.substring(start);
+    }
+
+    /**
+     * 鎴彇瀛楃涓�
+     * 
+     * @param str 瀛楃涓�
+     * @param start 寮�濮�
+     * @param end 缁撴潫
+     * @return 缁撴灉
+     */
+    public static String substring(final String str, int start, int end)
+    {
+        if (str == null)
+        {
+            return NULLSTR;
+        }
+
+        if (end < 0)
+        {
+            end = str.length() + end;
+        }
+        if (start < 0)
+        {
+            start = str.length() + start;
+        }
+
+        if (end > str.length())
+        {
+            end = str.length();
+        }
+
+        if (start > end)
+        {
+            return NULLSTR;
+        }
+
+        if (start < 0)
+        {
+            start = 0;
+        }
+        if (end < 0)
+        {
+            end = 0;
+        }
+
+        return str.substring(start, end);
+    }
+
+
+
+
+    /**
+     * 瀛楃涓茶浆set
+     * 
+     * @param str 瀛楃涓�
+     * @param sep 鍒嗛殧绗�
+     * @return set闆嗗悎
+     */
+    public static final Set<String> str2Set(String str, String sep)
+    {
+        return new HashSet<String>(str2List(str, sep, true, false));
+    }
+
+    /**
+     * 瀛楃涓茶浆list
+     * 
+     * @param str 瀛楃涓�
+     * @param sep 鍒嗛殧绗�
+     * @param filterBlank 杩囨护绾┖鐧�
+     * @param trim 鍘绘帀棣栧熬绌虹櫧
+     * @return list闆嗗悎
+     */
+    public static final List<String> str2List(String str, String sep, boolean filterBlank, boolean trim)
+    {
+        List<String> list = new ArrayList<String>();
+        if (StringUtils.isEmpty(str))
+        {
+            return list;
+        }
+
+        // 杩囨护绌虹櫧瀛楃涓�
+        if (filterBlank && StringUtils.isBlank(str))
+        {
+            return list;
+        }
+        String[] split = str.split(sep);
+        for (String string : split)
+        {
+            if (filterBlank && StringUtils.isBlank(string))
+            {
+                continue;
+            }
+            if (trim)
+            {
+                string = string.trim();
+            }
+            list.add(string);
+        }
+
+        return list;
+    }
+
+    /**
+     * 鍒ゆ柇缁欏畾鐨剆et鍒楄〃涓槸鍚﹀寘鍚暟缁刟rray 鍒ゆ柇缁欏畾鐨勬暟缁刟rray涓槸鍚﹀寘鍚粰瀹氱殑鍏冪礌value
+     *
+     *
+     * @param array 缁欏畾鐨勬暟缁�
+     * @return boolean 缁撴灉
+     */
+    public static boolean containsAny(Collection<String> collection, String... array)
+    {
+        if (isEmpty(collection) || isEmpty(array))
+        {
+            return false;
+        }
+        else
+        {
+            for (String str : array)
+            {
+                if (collection.contains(str))
+                {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
+    /**
+     * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀寘鍚寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆鍚屾椂涓插拷鐣ュぇ灏忓啓
+     *
+     * @param cs 鎸囧畾瀛楃涓�
+     * @param searchCharSequences 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁�
+     * @return 鏄惁鍖呭惈浠绘剰涓�涓瓧绗︿覆
+     */
+    public static boolean containsAnyIgnoreCase(CharSequence cs, CharSequence... searchCharSequences)
+    {
+        if (isEmpty(cs) || isEmpty(searchCharSequences))
+        {
+            return false;
+        }
+        for (CharSequence testStr : searchCharSequences)
+        {
+            if (containsIgnoreCase(cs, testStr))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 椹煎嘲杞笅鍒掔嚎鍛藉悕
+     */
+    public static String toUnderScoreCase(String str)
+    {
+        if (str == null)
+        {
+            return null;
+        }
+        StringBuilder sb = new StringBuilder();
+        // 鍓嶇疆瀛楃鏄惁澶у啓
+        boolean preCharIsUpperCase = true;
+        // 褰撳墠瀛楃鏄惁澶у啓
+        boolean curreCharIsUpperCase = true;
+        // 涓嬩竴瀛楃鏄惁澶у啓
+        boolean nexteCharIsUpperCase = true;
+        for (int i = 0; i < str.length(); i++)
+        {
+            char c = str.charAt(i);
+            if (i > 0)
+            {
+                preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1));
+            }
+            else
+            {
+                preCharIsUpperCase = false;
+            }
+
+            curreCharIsUpperCase = Character.isUpperCase(c);
+
+            if (i < (str.length() - 1))
+            {
+                nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1));
+            }
+
+            if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase)
+            {
+                sb.append(SEPARATOR);
+            }
+            else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase)
+            {
+                sb.append(SEPARATOR);
+            }
+            sb.append(Character.toLowerCase(c));
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * 鏄惁鍖呭惈瀛楃涓�
+     * 
+     * @param str 楠岃瘉瀛楃涓�
+     * @param strs 瀛楃涓茬粍
+     * @return 鍖呭惈杩斿洖true
+     */
+    public static boolean inStringIgnoreCase(String str, String... strs)
+    {
+        if (str != null && strs != null)
+        {
+            for (String s : strs)
+            {
+                if (str.equalsIgnoreCase(trim(s)))
+                {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 灏嗕笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆杞崲涓洪┘宄板紡銆傚鏋滆浆鎹㈠墠鐨勪笅鍒掔嚎澶у啓鏂瑰紡鍛藉悕鐨勫瓧绗︿覆涓虹┖锛屽垯杩斿洖绌哄瓧绗︿覆銆� 渚嬪锛欻ELLO_WORLD->HelloWorld
+     * 
+     * @param name 杞崲鍓嶇殑涓嬪垝绾垮ぇ鍐欐柟寮忓懡鍚嶇殑瀛楃涓�
+     * @return 杞崲鍚庣殑椹煎嘲寮忓懡鍚嶇殑瀛楃涓�
+     */
+    public static String convertToCamelCase(String name)
+    {
+        StringBuilder result = new StringBuilder();
+        // 蹇�熸鏌�
+        if (name == null || name.isEmpty())
+        {
+            // 娌″繀瑕佽浆鎹�
+            return "";
+        }
+        else if (!name.contains("_"))
+        {
+            // 涓嶅惈涓嬪垝绾匡紝浠呭皢棣栧瓧姣嶅ぇ鍐�
+            return name.substring(0, 1).toUpperCase() + name.substring(1);
+        }
+        // 鐢ㄤ笅鍒掔嚎灏嗗師濮嬪瓧绗︿覆鍒嗗壊
+        String[] camels = name.split("_");
+        for (String camel : camels)
+        {
+            // 璺宠繃鍘熷瀛楃涓蹭腑寮�澶淬�佺粨灏剧殑涓嬫崲绾挎垨鍙岄噸涓嬪垝绾�
+            if (camel.isEmpty())
+            {
+                continue;
+            }
+            // 棣栧瓧姣嶅ぇ鍐�
+            result.append(camel.substring(0, 1).toUpperCase());
+            result.append(camel.substring(1).toLowerCase());
+        }
+        return result.toString();
+    }
+
+    /**
+     * 椹煎嘲寮忓懡鍚嶆硶 渚嬪锛歶ser_name->userName
+     */
+    public static String toCamelCase(String s)
+    {
+        if (s == null)
+        {
+            return null;
+        }
+        s = s.toLowerCase();
+        StringBuilder sb = new StringBuilder(s.length());
+        boolean upperCase = false;
+        for (int i = 0; i < s.length(); i++)
+        {
+            char c = s.charAt(i);
+
+            if (c == SEPARATOR)
+            {
+                upperCase = true;
+            }
+            else if (upperCase)
+            {
+                sb.append(Character.toUpperCase(c));
+                upperCase = false;
+            }
+            else
+            {
+                sb.append(c);
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 鏌ユ壘鎸囧畾瀛楃涓叉槸鍚﹀尮閰嶆寚瀹氬瓧绗︿覆鍒楄〃涓殑浠绘剰涓�涓瓧绗︿覆
+     * 
+     * @param str 鎸囧畾瀛楃涓�
+     * @param strs 闇�瑕佹鏌ョ殑瀛楃涓叉暟缁�
+     * @return 鏄惁鍖归厤
+     */
+    public static boolean matches(String str, List<String> strs)
+    {
+        if (isEmpty(str) || isEmpty(strs))
+        {
+            return false;
+        }
+        for (String pattern : strs)
+        {
+            if (isMatch(pattern, str))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * 鍒ゆ柇url鏄惁涓庤鍒欓厤缃�: 
+     * ? 琛ㄧず鍗曚釜瀛楃; 
+     * * 琛ㄧず涓�灞傝矾寰勫唴鐨勪换鎰忓瓧绗︿覆锛屼笉鍙法灞傜骇; 
+     * ** 琛ㄧず浠绘剰灞傝矾寰�;
+     * 
+     * @param pattern 鍖归厤瑙勫垯
+     * @param url 闇�瑕佸尮閰嶇殑url
+     * @return
+     */
+    public static boolean isMatch(String pattern, String url)
+    {
+        AntPathMatcher matcher = new AntPathMatcher();
+        return matcher.match(pattern, url);
+    }
+
+    @SuppressWarnings("unchecked")
+    public static <T> T cast(Object obj)
+    {
+        return (T) obj;
+    }
+
+    /**
+     * 鏁板瓧宸﹁竟琛ラ綈0锛屼娇涔嬭揪鍒版寚瀹氶暱搴︺�傛敞鎰忥紝濡傛灉鏁板瓧杞崲涓哄瓧绗︿覆鍚庯紝闀垮害澶т簬size锛屽垯鍙繚鐣� 鏈�鍚巗ize涓瓧绗︺��
+     * 
+     * @param num 鏁板瓧瀵硅薄
+     * @param size 瀛楃涓叉寚瀹氶暱搴�
+     * @return 杩斿洖鏁板瓧鐨勫瓧绗︿覆鏍煎紡锛岃瀛楃涓蹭负鎸囧畾闀垮害銆�
+     */
+    public static final String padl(final Number num, final int size)
+    {
+        return padl(num.toString(), size, '0');
+    }
+
+    /**
+     * 瀛楃涓插乏琛ラ綈銆傚鏋滃師濮嬪瓧绗︿覆s闀垮害澶т簬size锛屽垯鍙繚鐣欐渶鍚巗ize涓瓧绗︺��
+     * 
+     * @param s 鍘熷瀛楃涓�
+     * @param size 瀛楃涓叉寚瀹氶暱搴�
+     * @param c 鐢ㄤ簬琛ラ綈鐨勫瓧绗�
+     * @return 杩斿洖鎸囧畾闀垮害鐨勫瓧绗︿覆锛岀敱鍘熷瓧绗︿覆宸﹁ˉ榻愭垨鎴彇寰楀埌銆�
+     */
+    public static final String padl(final String s, final int size, final char c)
+    {
+        final StringBuilder sb = new StringBuilder(size);
+        if (s != null)
+        {
+            final int len = s.length();
+            if (s.length() <= size)
+            {
+                for (int i = size - len; i > 0; i--)
+                {
+                    sb.append(c);
+                }
+                sb.append(s);
+            }
+            else
+            {
+                return s.substring(len - size, len);
+            }
+        }
+        else
+        {
+            for (int i = size; i > 0; i--)
+            {
+                sb.append(c);
+            }
+        }
+        return sb.toString();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/ard/utils/spring/SpringUtils.java b/src/main/java/com/ard/utils/spring/SpringUtils.java
new file mode 100644
index 0000000..a71757e
--- /dev/null
+++ b/src/main/java/com/ard/utils/spring/SpringUtils.java
@@ -0,0 +1,158 @@
+package com.ard.utils.spring;
+
+import com.ard.utils.other.StringUtils;
+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;
+
+/**
+ * spring宸ュ叿绫� 鏂逛究鍦ㄩ潪spring绠$悊鐜涓幏鍙朾ean
+ * 
+ * @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);
+    }
+
+    /**
+     * 鑾峰彇绫诲瀷涓簉equiredType鐨勫璞�
+     *
+     * @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瀹氫箟鏄竴涓猻ingleton杩樻槸涓�涓猵rototype銆� 濡傛灉涓庣粰瀹氬悕瀛楃浉搴旂殑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);
+    }
+
+    /**
+     * 濡傛灉缁欏畾鐨刡ean鍚嶅瓧鍦╞ean瀹氫箟涓湁鍒悕锛屽垯杩斿洖杩欎簺鍒悕
+     *
+     * @param name
+     * @return
+     * @throws NoSuchBeanDefinitionException
+     *
+     */
+    public static String[] getAliases(String name) throws NoSuchBeanDefinitionException
+    {
+        return beanFactory.getAliases(name);
+    }
+
+    /**
+     * 鑾峰彇aop浠g悊瀵硅薄
+     * 
+     * @param invoker
+     * @return
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T getAopProxy(T invoker)
+    {
+        return (T) AopContext.currentProxy();
+    }
+
+    /**
+     * 鑾峰彇褰撳墠鐨勭幆澧冮厤缃紝鏃犻厤缃繑鍥瀗ull
+     *
+     * @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 閰嶇疆鏂囦欢鐨刱ey
+     * @return 褰撳墠鐨勯厤缃枃浠剁殑鍊�
+     *
+     */
+    public static String getRequiredProperty(String key)
+    {
+        return applicationContext.getEnvironment().getRequiredProperty(key);
+    }
+}
diff --git a/src/main/java/com/ard/utils/udp/NettyUdpHandler.java b/src/main/java/com/ard/utils/udp/NettyUdpHandler.java
index c3bb951..5e2160b 100644
--- a/src/main/java/com/ard/utils/udp/NettyUdpHandler.java
+++ b/src/main/java/com/ard/utils/udp/NettyUdpHandler.java
@@ -1,7 +1,7 @@
 package com.ard.utils.udp;
 
 import com.ard.alarm.tube.service.TubeAlarmService;
-import com.ard.utils.other.SpringTool;
+import com.ard.utils.spring.SpringUtils;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
@@ -20,7 +20,7 @@
             ByteBuf byteBuf = packet.content();
             String str = byteBuf.toString(Charset.forName("GBK"));
             log.info("udp鏀跺埌鏁版嵁: " + str);
-            TubeAlarmService tubeAlarmService = (TubeAlarmService) SpringTool.getApplicationContext().getBean("tubeAlarmService");
+            TubeAlarmService tubeAlarmService = SpringUtils.getBean(TubeAlarmService.class);
             tubeAlarmService.alarmHandler(str);
             String resStr = "ok";
             byte[] resBytes = resStr.getBytes(Charset.forName("GBK"));
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
new file mode 100644
index 0000000..bbc7292
--- /dev/null
+++ b/src/main/resources/application-dev.yml
@@ -0,0 +1,70 @@
+# 寮�鍙戠幆澧�
+server:
+  port: 8088
+# spring閰嶇疆
+spring:
+  servlet:
+    multipart:
+      enabled: true
+      max-file-size: 30MB
+      max-request-size: 30MB
+  datasource:
+      #  浣跨敤druid鏁版嵁搴撹繛鎺ユ睜
+    druid:
+        #寮�鍚痙ruid鐩戞帶web
+      stat-view-servlet:
+        enabled: true
+      driver-class-name: org.postgresql.Driver
+      url: jdbc:postgresql://192.168.1.15:5432/ry-vue?stringtype=unspecified
+      username: postgres
+      password: postgres
+      #鏈�澶ц繛鎺ユ暟
+      maxActive: 30
+      #鏈�灏忚繛鎺ユ暟
+      minIdle: 5
+      #鑾峰彇杩炴帴鐨勬渶澶х瓑寰呮椂闂�
+      maxWait: 10000
+      #瑙e喅mysql8灏忔椂鐨勯棶棰�
+      validation-query: SELECT 'X'
+      #绌洪棽杩炴帴鐨勬鏌ユ椂闂撮棿闅�
+      timeBetweenEvictionRunsMillis: 60000
+      #绌洪棽杩炴帴鏈�灏忕┖闂叉椂闂�
+      minEvictableIdleTimeMillis: 300000
+  # netty閰嶇疆
+  netty:
+    udp:
+      port: 40000
+      enabled: true
+    tcp:
+      enabled: true
+  # mqtt閰嶇疆
+  mqtt:
+    host: tcp://192.168.1.15:1883
+    clientId: cc3
+    username: admin
+    password: xzx12345
+    topic: tube
+    timeout: 100
+    keepalive: 60
+    enabled: true
+  # 鐩楃數鎺ュ彛鍦板潃
+  stealelec:
+    url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil
+  # minio閰嶇疆
+  minio:
+    endpoint: http://192.168.1.15:9001
+    accessKey: admin
+    secretKey: xzx12345
+# mybatis閰嶇疆
+mybatis:
+  typeAliasesPackage: com.ard.alarm.**.domain
+  mapperLocations: classpath:/mapper/*.xml
+# 鏃ュ織绛夌骇閰嶇疆
+logging:
+  level:
+    hikSdk: debug
+    mqtt: info
+    netty: info
+    external: info
+    camera: info
+    tube: info
diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml
new file mode 100644
index 0000000..c74b5f0
--- /dev/null
+++ b/src/main/resources/application-prod.yml
@@ -0,0 +1,67 @@
+#鐢熶骇鐜
+spring:
+  servlet:
+    multipart:
+      enabled: true
+      max-file-size: 30MB
+      max-request-size: 30MB
+  datasource:
+      #  浣跨敤druid鏁版嵁搴撹繛鎺ユ睜
+    druid:
+        #寮�鍚痙ruid鐩戞帶web
+      stat-view-servlet:
+        enabled: true
+      driver-class-name: org.postgresql.Driver
+      url: jdbc:postgresql://112.98.126.2:35432/ry-vue?stringtype=unspecified
+      username: postgres
+      password: Yykj.2017
+      #鏈�澶ц繛鎺ユ暟
+      maxActive: 30
+      #鏈�灏忚繛鎺ユ暟
+      minIdle: 5
+      #鑾峰彇杩炴帴鐨勬渶澶х瓑寰呮椂闂�
+      maxWait: 10000
+      #瑙e喅mysql8灏忔椂鐨勯棶棰�
+      validation-query: SELECT 'X'
+      #绌洪棽杩炴帴鐨勬鏌ユ椂闂撮棿闅�
+      timeBetweenEvictionRunsMillis: 60000
+      #绌洪棽杩炴帴鏈�灏忕┖闂叉椂闂�
+      minEvictableIdleTimeMillis: 300000
+  # netty閰嶇疆
+  netty:
+    udp:
+      port: 40000
+      enabled: true
+    tcp:
+      enabled: true
+  # minio閰嶇疆
+  minio:
+    endpoint: http://127.0.0.1:9001
+    accessKey: admin
+    secretKey: xzx12345
+  # mqtt閰嶇疆
+  mqtt:
+    host: tcp://192.168.1.15:1883
+    clientId: cc3
+    username: admin
+    password: xzx12345
+    topic: tube
+    timeout: 100
+    keepalive: 60
+    enabled: true
+  stealelec:
+    url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil
+mybatis:
+  typeAliasesPackage: com.ard.alarm.**.domain
+  mapperLocations: classpath:/mapper/*.xml
+
+server:
+  port: 8088
+logging:
+  level:
+    hikSdk: debug
+    mqtt: info
+    netty: info
+    external: info
+    camera: info
+    tube: info
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index a2f5e97..fadf7d2 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -1,61 +1,4 @@
 spring:
-  servlet:
-    multipart:
-      enabled: true
-      max-file-size: 30MB
-      max-request-size: 30MB
-  datasource:
-      #  浣跨敤druid鏁版嵁搴撹繛鎺ユ睜
-    druid:
-        #寮�鍚痙ruid鐩戞帶web
-      stat-view-servlet:
-        enabled: true
-      driver-class-name: 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
-      #鏈�澶ц繛鎺ユ暟
-      maxActive: 30
-      #鏈�灏忚繛鎺ユ暟
-      minIdle: 5
-      #鑾峰彇杩炴帴鐨勬渶澶х瓑寰呮椂闂�
-      maxWait: 10000
-      #瑙e喅mysql8灏忔椂鐨勯棶棰�
-      validation-query: SELECT 'X'
-      #绌洪棽杩炴帴鐨勬鏌ユ椂闂撮棿闅�
-      timeBetweenEvictionRunsMillis: 60000
-      #绌洪棽杩炴帴鏈�灏忕┖闂叉椂闂�
-      minEvictableIdleTimeMillis: 300000
-  netty:
-    udp:
-      port: 40000
-      enabled: true
-    tcp:
-      enabled: true
-  mqtt:
-    host: tcp://192.168.1.15:1883
-    clientId: cc3
-    username: admin
-    password: xzx12345
-    topic: tube
-    timeout: 100
-    keepalive: 60
-    enabled: true
-  stealelec:
-    url: http://iot.zhdk.net:8090/Warning/GetWarning?userName=cy4oil
-mybatis:
-  typeAliasesPackage: com.ard.alarm.**.domain
-  mapperLocations: classpath:/mapper/*.xml
-# minio閰嶇疆
-minio:
-  endpoint: http://192.168.1.15:9001
-  accessKey: admin
-  secretKey: xzx12345
-server:
-  port: 8088
-logging:
-  level:
-    com.ard.utils.hiksdk.service.impl.FMSGCallBack: debug
+  profiles:
+    active: prod
+

--
Gitblit v1.9.3