如何在通过jsonitemreader读取json文件内容后删除它?
下面是我的jsonitemreader的示例代码。
@Bean
@StepScope
public JsonItemReader<MyObj> myReader() {
LOGGER.info(LOG_TEMPLATE,
getClass().getSimpleName(),
Thread.currentThread().getStackTrace()[1].getMethodName(),
"Inside Reader...");
final ObjectMapper mapper = new ObjectMapper();
final JacksonJsonObjectReader<MyObj> jsonObjectReader = new JacksonJsonObjectReader<>(
MyObj.class);
jsonObjectReader.setMapper(mapper);
final String filePath = config.getRootfolder() + SEPERATOR + inputInfo.getFileName();
return new JsonItemReaderBuilder<MyObj>().jsonObjectReader(jsonObjectReader)
.resource(new FileSystemResource(filePath))
.name("myReader")
.build();
}
然后我在joblistener中添加了一个代码,在作业执行之后,它将删除所述文件。下面是示例代码。
@Override
public void afterJob(JobExecution jobExecution) {
if (jobExecution.getStatus() == BatchStatus.COMPLETED) {
LOGGER.info(LOG_TEMPLATE,
getClass().getSimpleName(),
Thread.currentThread().getStackTrace()[1].getMethodName(),
"Job Completed, verify results.");
} else {
LOGGER.error(LOG_TEMPLATE,
getClass().getSimpleName(),
Thread.currentThread().getStackTrace()[1].getMethodName(),
"Job ended abnormally.");
}
try {
Files.delete(Paths.get(config.getRootfolder() + "/" + inputInfo.getFileName()));
} catch (final IOException ex) {
LOGGER.error(LOG_TEMPLATE,
getClass().getSimpleName(),
Thread.currentThread().getStackTrace()[1].getMethodName(),
ex.getMessage());
}
}
但我得到一个错误,该文件仍在打开或仍在读取。
1条答案
按热度按时间xzv2uavs1#
我不知道这是不是在jsonitmreader步骤之后删除json文件的正确而有效的方法,但是这种方法对我来说很有效。
我所做的是用tasklet创建了一个新的步骤来删除所说的json文件。下面是示例代码。
tasklet类: