#java #spring #spring-integration #spring-batch
#java #spring #spring-интеграция #spring-batch
Вопрос:
Я использую общий исходный код для настройки опросника каталогов в Spring Integration. Опросник использует NioLocker для блокировки и файла, и за JavaDocs я отвечаю за разблокировку файла с помощью NioFileLocker.unlock (file).
Мои основные вопросы: когда это должно произойти и, конечно, как?
Моя первоначальная мысль — после того, как мой прослушиватель заданий переместит файл в новый каталог. В настоящее время я знаю только имя пути к файлу и не имею дескриптора для самого файла.
Код опросника каталогов:
@Bean
@InboundChannelAdapter(value = "claimInputChannel", poller = @Poller(fixedDelay = "5000"))
public FileReadingMessageSource claimPollingFileSource(){
logger.debug("Setting up inbound channel adapter ===> claimInputChannel");
CompositeFileListFilter<File> compositeFileListFilter= new CompositeFileListFilter<File>();
compositeFileListFilter.addFilter(new RegexPatternFileListFilter("(?i).*_CLAIM_.*[.]txt"));
compositeFileListFilter.addFilter(lastModifiedFilter());
compositeFileListFilter.addFilter(new IgnoreHiddenFileListFilter());
compositeFileListFilter.addFilter(new AcceptOnceFileListFilter<File>());
FileReadingMessageSource pollDirectory = new FileReadingMessageSource();
pollDirectory.setDirectory(new File(pollingDirectory));
pollDirectory.setAutoCreateDirectory(false);
pollDirectory.setFilter(compositeFileListFilter);
pollDirectory.setLocker(new NioFileLocker());
return pollDirectory;
}
Код AfterJob в прослушивателе:
@Override
public void afterJob(JobExecution jobExecution) {
logger.debug("In afterJob routine");
if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
// check if directory exists
File dir = new File(processedDirectory);
if (dir.exists()) {
Path sourcePath = Paths.get(jobExecution.getJobParameters().getString("fileName"));
String target = processedDirectory "/" sourcePath.getFileName();
logger.debug("Moving processed file " sourcePath.toString() " to " target);
try {
Files.move(sourcePath, Paths.get(target), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
logger.error("Something went wrong in moving file to processed directory.");
e.printStackTrace();
}
} else {
logger.error("The " processedDirectory " does not exist.");
}
} else {
logger.debug("Batch job is not yet complete.");
}
}