gpt4 book ai didi

java - MessageChannel.send 方法什么时候返回?

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:54 26 4
gpt4 key购买 nike

我正在尝试在本地文件夹中生成一个文件,然后通过 SFTP 将其发送到远程服务器,最后删除创建的“临时”文件。几乎一切正常。

问题:当我尝试使用 File.delete (或 Files.delete)删除文件时,它不会这样做。原因:文件被另一个进程使用。请注意,没有其他进程(除了通过 sftp 发送该文件的进程之外)正在使用该文件。

处理以下文件的代码:

List<Order> orders = orderRepository.findAll();
try (FileWriter fileWriter = new FileWriter(tempFile)) {
contentCreator.generateContent(orders, fileWriter);
LOGGER.debug("Handover file written successfully " + tempFile.getAbsolutePath());
} catch (IOException e) {
throw new IllegalStateException("Cannot write in the temp folder. Handover failed.", e);
}

final Message<File> message = MessageBuilder.withPayload(tempFile).build();
if (sftpChannel.send(message)) { //sftpChannel comes autowired by Spring IoC
doLogicInCaseOfSuccess(); //I set some DB records after the file was sent successfully over sftp.
tempFile.delete(0);
}

这是配置:

<bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="host" value="${host}"/>
<property name="port" value="${port}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
</bean>

<int:channel id="apstChannel"/>

<int-sftp:outbound-channel-adapter id="sftpOutboundAdapter"
session-factory="sftpSessionFactory"
channel="apstChannel"
charset="UTF-8"
remote-directory="${dropFolder}"
/>

我不明白的是,即使 MessageChannel.send 方法返回 true(因此传输成功),文件为何仍在使用中?

由于我找不到任何文档,所以我现在不相信当文件排队通过 sftp 发送时或实际发送后该方法会返回 true。您知道 send 方法何时返回吗?

此外,如果您知道我如何删除该文件的其他方法,那就太好了。

最佳答案

根据其 Javadoc,如果消息已成功发送,则返回 true,这意味着在成功的情况下,直到发送完成才能返回。当然失败的情况下也可以立即返回。

当然,它应该在失败的情况下抛出异常,而不是仅仅返回 false。糟糕的设计。

关于java - MessageChannel.send 方法什么时候返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22371762/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com