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); } } 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); } /** ard-work/src/main/java/com/ruoyi/device/hiksdk/config/MinioClientSingleton.java
ÎļþÒÑɾ³ý 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; 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); } } } 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(); // } } 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; } } 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); 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(); } } } 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é 置对象"); 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) { ard-work/src/main/java/com/ruoyi/utils/mqtt/PropertiesUtil.java
ÎļþÒÑɾ³ý 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); } } 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', ruoyi-admin/src/main/resources/application-ard.yml
ÎļþÒÑɾ³ý 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 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 ruoyi-admin/src/main/resources/application-druid.yml
ÎļþÒÑɾ³ý 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 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 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 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()); }