mirror of
https://gitee.com/kekingcn/file-online-preview.git
synced 2025-04-05 17:37:49 +08:00
支持自动清理预览文件及缓存
This commit is contained in:
parent
13123f8f9d
commit
cf1ee9c631
@ -27,6 +27,8 @@ spring.http.multipart.max-file-size=100MB
|
|||||||
#redis连接
|
#redis连接
|
||||||
#spring.redisson.address = 192.168.1.204:6379
|
#spring.redisson.address = 192.168.1.204:6379
|
||||||
#spring.redisson.password = xxx
|
#spring.redisson.password = xxx
|
||||||
|
#缓存自动清理(每晚3点自动清理) true 为开启,注释掉或其他值都为关闭
|
||||||
|
cache.clean = true
|
||||||
|
|
||||||
#######################################可在运行时动态配置#######################################
|
#######################################可在运行时动态配置#######################################
|
||||||
#文本类型,默认如下,可自定义添加
|
#文本类型,默认如下,可自定义添加
|
||||||
|
@ -20,7 +20,7 @@ public interface CacheService {
|
|||||||
|
|
||||||
void initPDFCachePool(Integer capacity);
|
void initPDFCachePool(Integer capacity);
|
||||||
void initIMGCachePool(Integer capacity);
|
void initIMGCachePool(Integer capacity);
|
||||||
public void initPdfImagesCachePool(Integer capacity);
|
void initPdfImagesCachePool(Integer capacity);
|
||||||
void putPDFCache(String key, String value);
|
void putPDFCache(String key, String value);
|
||||||
void putImgCache(String key, List<String> value);
|
void putImgCache(String key, List<String> value);
|
||||||
Map<String, String> getPDFCache();
|
Map<String, String> getPDFCache();
|
||||||
@ -30,7 +30,11 @@ public interface CacheService {
|
|||||||
Integer getPdfImageCache(String key);
|
Integer getPdfImageCache(String key);
|
||||||
void putPdfImageCache(String pdfFilePath, int num);
|
void putPdfImageCache(String pdfFilePath, int num);
|
||||||
|
|
||||||
|
void cleanCache();
|
||||||
|
|
||||||
void addQueueTask(String url);
|
void addQueueTask(String url);
|
||||||
String takeQueueTask() throws InterruptedException;
|
String takeQueueTask() throws InterruptedException;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -116,6 +116,13 @@ public class CacheServiceJDKImpl implements CacheService {
|
|||||||
pdfImagesCache.put(pdfFilePath, num);
|
pdfImagesCache.put(pdfFilePath, num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cleanCache() {
|
||||||
|
initPDFCachePool(CacheService.DEFAULT_PDF_CAPACITY);
|
||||||
|
initIMGCachePool(CacheService.DEFAULT_IMG_CAPACITY);
|
||||||
|
initPdfImagesCachePool(CacheService.DEFAULT_PDFIMG_CAPACITY);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addQueueTask(String url) {
|
public void addQueueTask(String url) {
|
||||||
blockingQueue.add(url);
|
blockingQueue.add(url);
|
||||||
|
@ -94,6 +94,13 @@ public class CacheServiceRedisImpl implements CacheService {
|
|||||||
convertedList.fastPut(pdfFilePath, num);
|
convertedList.fastPut(pdfFilePath, num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void cleanCache() {
|
||||||
|
cleanPdfCache();
|
||||||
|
cleanImgCache();
|
||||||
|
cleanPdfImgCache();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addQueueTask(String url) {
|
public void addQueueTask(String url) {
|
||||||
RBlockingQueue<String> queue = redissonClient.getBlockingQueue(FileConverQueueTask.queueTaskName);
|
RBlockingQueue<String> queue = redissonClient.getBlockingQueue(FileConverQueueTask.queueTaskName);
|
||||||
@ -105,4 +112,19 @@ public class CacheServiceRedisImpl implements CacheService {
|
|||||||
RBlockingQueue<String> queue = redissonClient.getBlockingQueue(FileConverQueueTask.queueTaskName);
|
RBlockingQueue<String> queue = redissonClient.getBlockingQueue(FileConverQueueTask.queueTaskName);
|
||||||
return queue.take();
|
return queue.take();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void cleanPdfCache() {
|
||||||
|
RMapCache<String, String> pdfCache = redissonClient.getMapCache(REDIS_FILE_PREVIEW_PDF_KEY);
|
||||||
|
pdfCache.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cleanImgCache() {
|
||||||
|
RMapCache<String, List<String>> imgCache = redissonClient.getMapCache(REDIS_FILE_PREVIEW_IMGS_KEY);
|
||||||
|
imgCache.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cleanPdfImgCache() {
|
||||||
|
RMapCache<String, Integer> pdfImg = redissonClient.getMapCache(REDIS_FILE_PREVIEW_PDF_IMGS_KEY);
|
||||||
|
pdfImg.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
|
@Override
|
||||||
public void addQueueTask(String url) {
|
public void addQueueTask(String url) {
|
||||||
blockingQueue.add(url);
|
blockingQueue.add(url);
|
||||||
@ -210,4 +221,19 @@ public class CacheServiceRocksDBImpl implements CacheService {
|
|||||||
bis.close();
|
bis.close();
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void cleanPdfCache() throws IOException, RocksDBException {
|
||||||
|
Map<String, String> initPDFCache = new HashMap<>();
|
||||||
|
db.put(REDIS_FILE_PREVIEW_PDF_KEY.getBytes(), toByteArray(initPDFCache));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cleanImgCache() throws IOException, RocksDBException {
|
||||||
|
Map<String, List<String>> initIMGCache = new HashMap<>();
|
||||||
|
db.put(REDIS_FILE_PREVIEW_IMGS_KEY.getBytes(), toByteArray(initIMGCache));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cleanPdfImgCache() throws IOException, RocksDBException {
|
||||||
|
Map<String, Integer> initPDFIMGCache = new HashMap<>();
|
||||||
|
db.put(REDIS_FILE_PREVIEW_PDF_IMGS_KEY.getBytes(), toByteArray(initPDFIMGCache));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,14 @@
|
|||||||
package cn.keking.utils;
|
package cn.keking.utils;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
public class DeleteFileUtil {
|
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.exists() && file.isFile()) {
|
||||||
if (file.delete()) {
|
if (file.delete()) {
|
||||||
System.out.println("删除单个文件" + fileName + "成功!");
|
LOGGER.info("删除单个文件" + fileName + "成功!");
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
System.out.println("删除单个文件" + fileName + "失败!");
|
LOGGER.info("删除单个文件" + fileName + "失败!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
System.out.println("删除单个文件失败:" + fileName + "不存在!");
|
LOGGER.info("删除单个文件失败:" + fileName + "不存在!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -43,7 +49,7 @@ public class DeleteFileUtil {
|
|||||||
File dirFile = new File(dir);
|
File dirFile = new File(dir);
|
||||||
// 如果dir对应的文件不存在,或者不是一个目录,则退出
|
// 如果dir对应的文件不存在,或者不是一个目录,则退出
|
||||||
if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
|
if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
|
||||||
System.out.println("删除目录失败:" + dir + "不存在!");
|
LOGGER.info("删除目录失败:" + dir + "不存在!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
boolean flag = true;
|
boolean flag = true;
|
||||||
@ -65,7 +71,7 @@ public class DeleteFileUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!flag) {
|
if (!flag) {
|
||||||
System.out.println("删除目录失败!");
|
LOGGER.info("删除目录失败!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -1,15 +1,34 @@
|
|||||||
package cn.keking.utils;
|
package cn.keking.utils;
|
||||||
|
|
||||||
import cn.keking.config.ConfigConstants;
|
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;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @auther: chenjh
|
||||||
|
* @since: 2019/6/11 7:45
|
||||||
|
*/
|
||||||
@Component
|
@Component
|
||||||
|
@ConditionalOnExpression("'${cache.clean:false}'.equals('true')")
|
||||||
public class ShedulerClean {
|
public class ShedulerClean {
|
||||||
String fileDir = ConfigConstants.getFileDir();
|
|
||||||
|
|
||||||
// @Scheduled(cron = "0 0 23 * * ?") //每晚23点执行一次
|
private static final Logger LOGGER = LoggerFactory.getLogger(ShedulerClean.class);
|
||||||
public void clean(){
|
|
||||||
System.out.println("执行一次清空文件夹");
|
@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);
|
DeleteFileUtil.deleteDirectory(fileDir);
|
||||||
|
LOGGER.info("Cache clean end");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user