Spring 的 RemoteFileTemplate.get 方法是同步的吗?

Is Spring's RemoteFileTemplate.get method synchronous?

Spring的RemoteFileTemplate.get方法是同步的吗?

测试时,它似乎是同步的。检查实现时,它似乎也是同步的。而且我知道有理由使用同步回调而不是仅仅返回 InputStream.

但是为什么文档对回调 synchronous/asynchronous 只字未提?我可以假设回调将在未来的版本中保持同步吗?

这背后的原因是我想确保调用阻塞直到回调被执行。例如,我希望以下代码会导致以下输出:

代码:

remoteFileTemplate.get(filePath, stream -> System.out.println("1"));
System.out.println(2);

输出:

1
2

而且我从不希望输出是:

2
1

逻辑是这样的:

try (InputStream inputStream = session.readRaw(remotePath)) {
    callback.doWithInputStream(inputStream);
    return session.finalizeRaw();
}

关闭InputStream并释放远程资源。这里的 callback 只是一个 end-user 挂钩,用于接受远程文件数据流。由于会话未共享,因此没有任何 multi-threaded 问题。

当然我们不能保证所提供的InputStreamCallback impl是thread-safe。尽管当您将 inputStream 交给该回调中的其他线程时,它将关闭并释放会话。因此,您的其他线程将受到 out-dated InputStream 引用的影响。

我不确定您对回调有何担忧,因为这不是框架的作用。当您调用此 get(String remotePath, InputStreamCallback callback).

时,您提供了它的含义