diff --git a/src/main/java/cokr/xit/interfaces/filejob/service/bean/FileJobBean.java b/src/main/java/cokr/xit/interfaces/filejob/service/bean/FileJobBean.java index f25635a..3b519a7 100644 --- a/src/main/java/cokr/xit/interfaces/filejob/service/bean/FileJobBean.java +++ b/src/main/java/cokr/xit/interfaces/filejob/service/bean/FileJobBean.java @@ -9,6 +9,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.function.Predicate; +import java.util.stream.Collectors; import java.util.stream.Stream; import cokr.xit.foundation.component.ScheduledBean; @@ -174,7 +175,7 @@ public abstract class FileJobBean extends ScheduledBean { * @return 설정값 */ protected String config(String key) { - return config().getJobConf(jobName(), key); + return ifEmpty(config().getJobConf(jobName(), key), () -> config().getDefault(key)); } /**지정한 디렉토리의 파일들의 경로를 반환한다. @@ -184,7 +185,7 @@ public abstract class FileJobBean extends ScheduledBean { */ protected List getFilePaths(String dir, Predicate filter) { try (Stream walk = Files.list(Paths.get(dir))) { - return walk.filter(ifEmpty(filter, path -> true)).toList(); + return walk.filter(ifEmpty(filter, path -> true)).collect(Collectors.toList()); } catch (Exception e) { throw runtimeException(e); } @@ -224,12 +225,28 @@ public abstract class FileJobBean extends ScheduledBean { * @return 수신 작업 디렉토리의 파일 경로 목록 */ protected List getReceivedFilePaths(Predicate filter) { + return getReceivedFilePaths(filter, 0); + } + + /**수신 디렉토리의 파일들을 작업 디렉토리로 이동하고, 경로를 반환한다. + * @param filter 작업 대상 파일에 적용할 필터. 지정하지 않으면 모든 파일을 이동한다. + * @param fetchSize 이동 및 반환하는 파일경로 갯수 + *
  • 0보다 크면 해당 갯수의 경로
  • + *
  • 1보다 작으면 모든 경로
  • + *
+ * @return 수신 작업 디렉토리의 파일 경로 목록 + */ + protected List getReceivedFilePaths(Predicate filter, int fetchSize) { String receiveDir = receiveDir(), workingDir = receiveWorkingDir(); Predicate test = ifEmpty(filter, Files::isRegularFile); List paths = getFilePaths(receiveDir, test); - if (paths.isEmpty()) return Collections.emptyList(); + int size = paths.size(); + if (size < 1) return Collections.emptyList(); + + if (fetchSize > 0 && size > fetchSize) + paths.subList(fetchSize, size).clear(); move(paths, workingDir);