|
|
@@ -6,7 +6,6 @@ import java.nio.file.Path;
|
|
|
import java.nio.file.Paths;
|
|
|
import java.util.List;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
-import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
@@ -124,28 +123,22 @@ public class DataFileSyncTask
|
|
|
}
|
|
|
long intervalHours = config.getUpdateInterval() == null ? 0L : config.getUpdateInterval();
|
|
|
long modifiedAfter = System.currentTimeMillis() - TimeUnit.HOURS.toMillis(intervalHours);
|
|
|
- AtomicInteger inserted = new AtomicInteger();
|
|
|
+
|
|
|
try (Stream<Path> stream = Files.walk(root))
|
|
|
{
|
|
|
stream.filter(Files::isRegularFile)
|
|
|
.filter(path -> path.toFile().lastModified() >= modifiedAfter)
|
|
|
.forEach(path -> {
|
|
|
- if (registerFile(config, path))
|
|
|
- {
|
|
|
- inserted.incrementAndGet();
|
|
|
- }
|
|
|
+ registerFile(config, path);
|
|
|
});
|
|
|
}
|
|
|
- if (inserted.get() > 0)
|
|
|
- {
|
|
|
- log.info("[DataFileSyncTask] 目录 {} 新登记待处理文件 {} 个", config.getScanFolder(), inserted.get());
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 登记单个文件, 已存在(按文件路径查重)则跳过
|
|
|
+ * 登记单个文件: 先按文件路径精确查重, 已存在相同file记录则直接返回true;
|
|
|
+ * 不存在则保存到data_file_sync_files(保留insert-if-absent作为并发兜底)
|
|
|
*
|
|
|
- * @return 是否实际插入
|
|
|
+ * @return 文件是否已登记(已存在或本次插入成功)
|
|
|
*/
|
|
|
private boolean registerFile(FileSyncFolderConfig config, Path path)
|
|
|
{
|
|
|
@@ -158,7 +151,16 @@ public class DataFileSyncTask
|
|
|
row.setHandler(config.getHandler());
|
|
|
row.setProcessTimes(0);
|
|
|
row.setPriority(DataFileSyncFiles.DEFAULT_PRIORITY);
|
|
|
- return dataFileSyncFilesService.insertDataFileSyncFilesIfAbsent(row) > 0;
|
|
|
+ if (dataFileSyncFilesService.selectDataFileSyncFilesByFile(row.getFile()) != null)
|
|
|
+ {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ if (dataFileSyncFilesService.insertDataFileSyncFilesIfAbsent(row) > 0)
|
|
|
+ {
|
|
|
+ log.info("[DataFileSyncTask] 新登记待处理文件, file={}, handler={}", row.getFile(), row.getHandler());
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|