diff --git a/jodconverter-web/src/main/conf/application.properties b/jodconverter-web/src/main/conf/application.properties index 8cd2e8d5..7929870a 100644 --- a/jodconverter-web/src/main/conf/application.properties +++ b/jodconverter-web/src/main/conf/application.properties @@ -27,6 +27,8 @@ spring.http.multipart.max-file-size=100MB #redis连接 #spring.redisson.address = 192.168.1.204:6379 #spring.redisson.password = xxx +#缓存自动清理(每晚3点自动清理) true 为开启,注释掉或其他值都为关闭 +cache.clean = true #######################################可在运行时动态配置####################################### #文本类型,默认如下,可自定义添加 diff --git a/jodconverter-web/src/main/java/cn/keking/service/cache/CacheService.java b/jodconverter-web/src/main/java/cn/keking/service/cache/CacheService.java index 386fac70..0105ff1f 100644 --- a/jodconverter-web/src/main/java/cn/keking/service/cache/CacheService.java +++ b/jodconverter-web/src/main/java/cn/keking/service/cache/CacheService.java @@ -20,7 +20,7 @@ public interface CacheService { void initPDFCachePool(Integer capacity); void initIMGCachePool(Integer capacity); - public void initPdfImagesCachePool(Integer capacity); + void initPdfImagesCachePool(Integer capacity); void putPDFCache(String key, String value); void putImgCache(String key, List value); Map getPDFCache(); @@ -30,7 +30,11 @@ public interface CacheService { Integer getPdfImageCache(String key); void putPdfImageCache(String pdfFilePath, int num); + void cleanCache(); + void addQueueTask(String url); String takeQueueTask() throws InterruptedException; + + } diff --git a/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java b/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java index 7816b492..3f360bad 100644 --- a/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java +++ b/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceJDKImpl.java @@ -116,6 +116,13 @@ public class CacheServiceJDKImpl implements CacheService { pdfImagesCache.put(pdfFilePath, num); } + @Override + public void cleanCache() { + initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY); + initIMGCachePool(CacheService.DEFAULT_IMG_CAPACITY); + initPdfImagesCachePool(CacheService.DEFAULT_PDFIMG_CAPACITY); + } + @Override public void addQueueTask(String url) { blockingQueue.add(url); diff --git a/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRedisImpl.java b/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRedisImpl.java index a4324426..d8401aaa 100644 --- a/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRedisImpl.java +++ b/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRedisImpl.java @@ -94,6 +94,13 @@ public class CacheServiceRedisImpl implements CacheService { convertedList.fastPut(pdfFilePath, num); } + @Override + public void cleanCache() { + cleanPdfCache(); + cleanImgCache(); + cleanPdfImgCache(); + } + @Override public void addQueueTask(String url) { RBlockingQueue queue = redissonClient.getBlockingQueue(FileConverQueueTask.queueTaskName); @@ -105,4 +112,19 @@ public class CacheServiceRedisImpl implements CacheService { RBlockingQueue queue = redissonClient.getBlockingQueue(FileConverQueueTask.queueTaskName); return queue.take(); } + + private void cleanPdfCache() { + RMapCache pdfCache = redissonClient.getMapCache(REDIS_FILE_PREVIEW_PDF_KEY); + pdfCache.clear(); + } + + private void cleanImgCache() { + RMapCache> imgCache = redissonClient.getMapCache(REDIS_FILE_PREVIEW_IMGS_KEY); + imgCache.clear(); + } + + private void cleanPdfImgCache() { + RMapCache pdfImg = redissonClient.getMapCache(REDIS_FILE_PREVIEW_PDF_IMGS_KEY); + pdfImg.clear(); + } } diff --git a/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRocksDBImpl.java b/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRocksDBImpl.java index 07d86da8..af53190b 100644 --- a/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRocksDBImpl.java +++ b/jodconverter-web/src/main/java/cn/keking/service/cache/impl/CacheServiceRocksDBImpl.java @@ -179,6 +179,17 @@ public class CacheServiceRocksDBImpl implements CacheService { } } + @Override + public void cleanCache() { + try { + cleanPdfCache(); + cleanImgCache(); + cleanPdfImgCache(); + } catch (IOException | RocksDBException e) { + LOGGER.error("Clean Cache Exception" + e); + } + } + @Override public void addQueueTask(String url) { blockingQueue.add(url); @@ -210,4 +221,19 @@ public class CacheServiceRocksDBImpl implements CacheService { bis.close(); return obj; } + + private void cleanPdfCache() throws IOException, RocksDBException { + Map initPDFCache = new HashMap<>(); + db.put(REDIS_FILE_PREVIEW_PDF_KEY.getBytes(), toByteArray(initPDFCache)); + } + + private void cleanImgCache() throws IOException, RocksDBException { + Map> initIMGCache = new HashMap<>(); + db.put(REDIS_FILE_PREVIEW_IMGS_KEY.getBytes(), toByteArray(initIMGCache)); + } + + private void cleanPdfImgCache() throws IOException, RocksDBException { + Map initPDFIMGCache = new HashMap<>(); + db.put(REDIS_FILE_PREVIEW_PDF_IMGS_KEY.getBytes(), toByteArray(initPDFIMGCache)); + } } diff --git a/jodconverter-web/src/main/java/cn/keking/utils/DeleteFileUtil.java b/jodconverter-web/src/main/java/cn/keking/utils/DeleteFileUtil.java index fc54708b..dd7e7c50 100644 --- a/jodconverter-web/src/main/java/cn/keking/utils/DeleteFileUtil.java +++ b/jodconverter-web/src/main/java/cn/keking/utils/DeleteFileUtil.java @@ -1,8 +1,14 @@ package cn.keking.utils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.File; public class DeleteFileUtil { + + private static final Logger LOGGER = LoggerFactory.getLogger(DeleteFileUtil.class); + /** * 删除单个文件 * @@ -15,14 +21,14 @@ public class DeleteFileUtil { // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除 if (file.exists() && file.isFile()) { if (file.delete()) { - System.out.println("删除单个文件" + fileName + "成功!"); + LOGGER.info("删除单个文件" + fileName + "成功!"); return true; } else { - System.out.println("删除单个文件" + fileName + "失败!"); + LOGGER.info("删除单个文件" + fileName + "失败!"); return false; } } else { - System.out.println("删除单个文件失败:" + fileName + "不存在!"); + LOGGER.info("删除单个文件失败:" + fileName + "不存在!"); return false; } } @@ -43,7 +49,7 @@ public class DeleteFileUtil { File dirFile = new File(dir); // 如果dir对应的文件不存在,或者不是一个目录,则退出 if ((!dirFile.exists()) || (!dirFile.isDirectory())) { - System.out.println("删除目录失败:" + dir + "不存在!"); + LOGGER.info("删除目录失败:" + dir + "不存在!"); return false; } boolean flag = true; @@ -65,7 +71,7 @@ public class DeleteFileUtil { } } if (!flag) { - System.out.println("删除目录失败!"); + LOGGER.info("删除目录失败!"); return false; } return true; diff --git a/jodconverter-web/src/main/java/cn/keking/utils/ShedulerClean.java b/jodconverter-web/src/main/java/cn/keking/utils/ShedulerClean.java index fdb21236..b69b6a61 100644 --- a/jodconverter-web/src/main/java/cn/keking/utils/ShedulerClean.java +++ b/jodconverter-web/src/main/java/cn/keking/utils/ShedulerClean.java @@ -1,15 +1,34 @@ package cn.keking.utils; import cn.keking.config.ConfigConstants; +import cn.keking.service.cache.CacheService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +/** + * @auther: chenjh + * @since: 2019/6/11 7:45 + */ @Component +@ConditionalOnExpression("'${cache.clean:false}'.equals('true')") public class ShedulerClean { - String fileDir = ConfigConstants.getFileDir(); -// @Scheduled(cron = "0 0 23 * * ?") //每晚23点执行一次 - public void clean(){ - System.out.println("执行一次清空文件夹"); + private static final Logger LOGGER = LoggerFactory.getLogger(ShedulerClean.class); + + @Autowired + private CacheService cacheService; + + private String fileDir = ConfigConstants.getFileDir(); + + @Scheduled(cron = "0 0 3 * * ?") //每晚3点执行一次 + public void clean() { + LOGGER.info("Cache clean start"); + cacheService.cleanCache(); DeleteFileUtil.deleteDirectory(fileDir); + LOGGER.info("Cache clean end"); } }