我有以下代码:
//sftp
from(String.format("sftp://%s@%s:%d/%s?password=%s&delete=true",
sftpConfiguration.getUsername(),
sftpConfiguration.getHost(),
sftpConfiguration.getPort(),
sftpConfiguration.getSourcePath(),
sftpConfiguration.getPassword()))
.process(new Processor() {
@Override
public void process(Exchange exchange) {
try {
isCsv = CSV.equals(new
Tika().detect(exchange.getIn().getBody(InputStream.class), fileName));
} catch (IOException e) {
....
return;
}
final List<Map<String, Object>> parsedLines = misCsvParser.parse(exchange.getIn().getBody(InputStream.class), fileName);
...
}
}).to("seda:parsed_csv");
from("seda:parsed_csv")
.to(String.format("sftp://%s@%s:%d/%s?password=%s",
sftpConfiguration.getUsername(),
sftpConfiguration.getHost(),
sftpConfiguration.getPort(),
sftpConfiguration.getDestPathRejected(),
sftpConfiguration.getPassword()));
简要地说,此代码从sftpConfiguration.getSourcePath()
获取文件,对其进行分析,然后将其发送到sftpConfiguration.getDestPathRejected()
在我的本地mashine它总是很好,但在测试环境中我们的QA注意到有趣的行为:有时文件会丢失一些数据。例如输入文件 - 20 MB但是在分析了大小小于20MB的应用程序放置文件之后。例如,它可以是6 MB。而且如果重复此操作,相同的文件大小将会改变。它可以变成8 MB等等。因此行为是不可预测的。
我认为资源处理有问题,但我没有想法可能出错。
有什么想法吗?