正在尝试使用spring/java对本地主机进行sftp
我有一个多步骤的spring批处理工作。最后一步是sftp步骤。我试图对整个工作进行单元测试(我知道我可以对每个步骤进行单元测试,但无论如何我都必须面对这个问题)。我已经在我的应用程序上下文中定义了一个测试概要文件,其中包含我用于测试的bean。我的非测试sftp工作成功并正确传输文件。然而,当尝试使用localhost进行测试时,出现了一些问题。我读过类似的问题,例如哪些是有用的,但不完全是我想要的 当我运行测试时,当前发生的情况是,当程序到达代码中的以下行时,程序停止:正在尝试使用spring/java对本地主机进行sftp,java,unit-testing,sftp,spring-integration,jsch,Java,Unit Testing,Sftp,Spring Integration,Jsch,我有一个多步骤的spring批处理工作。最后一步是sftp步骤。我试图对整个工作进行单元测试(我知道我可以对每个步骤进行单元测试,但无论如何我都必须面对这个问题)。我已经在我的应用程序上下文中定义了一个测试概要文件,其中包含我用于测试的bean。我的非测试sftp工作成功并正确传输文件。然而,当尝试使用localhost进行测试时,出现了一些问题。我读过类似的问题,例如哪些是有用的,但不完全是我想要的 当我运行测试时,当前发生的情况是,当程序到达代码中的以下行时,程序停止: sftpChanne
sftpChannel.send(message);
应用程序仍在运行,但我可以从调试中看到什么都没有发生
我的问题不是连接问题,正如我的日志所示:
2813 [main] INFO com.jcraft.jsch - Connecting to localhost port 9000
2813 [main] INFO com.jcraft.jsch - Connection established
以下是我的应用程序上下文中的sftp代码:
<bean id="sftpSessionFactory" class="org.springframework.integration.sftp.session.DefaultSftpSessionFactory">
<property name="host" value="localhost"/>
<property name="user" value="user"/>
<property name="password" value="password"/>
<property name="port" value="9000"/>
</bean>
<int:channel id="outputChannel" />
<int-sftp:outbound-channel-adapter id="sftpOutboundAdapter"
session-factory="sftpSessionFactory"
channel="outputChannel"
charset="UTF-8"
remote-directory="testFolder/ftp"
remote-filename-generator="fileNameGenerator"
/>
<bean id="fileNameGenerator" class="org.springframework.integration.file.DefaultFileNameGenerator"/>
我的tasklet将sftpChannel设置为这样
public void setSftpChannel(MessageChannel sftpChannel) {
this.sftpChannel = sftpChannel;
}
在做了更多的研究之后,我的问题肯定是MessageChannel会无限期地阻塞—这在spring文档中有记录
出于某种原因,当我使用send(Message,long)的重载方法时,即使它达到了我在long中指定的时间,它仍然会无限期地阻塞
留给我的问题是,为什么MessageChannel会被阻塞?为什么我指定了一个超时 一,。您真的确定
sftpChannel
正是您的配置中的outputChannel
吗?2.尝试打开org.springframework.integration
类别的调试日志记录,并在发送消息后查看结果日志。@ArtemBilan 1。对我可以在调试中看到它有一个bean outputChannel。此外,它在测试之外工作。2.如何打开日志记录?它不是自动启用的吗?谢谢你的帮助!不,它不是默认的。您应该在测试资源中创建log4j.properties
(或适用于您的日志框架),并为SI配置调试package@ArtemBilan嗯,我添加了调试。在我上面写的连接建立消息之后没有消息。它没有进入消息发送阶段。。。不过,我在调试日志中注意到了这一点,我必须查看这些日志<代码>ResourcesTransactionManager-创建名为[null]的新事务:需要传播,隔离默认值
public void setSftpChannel(MessageChannel sftpChannel) {
this.sftpChannel = sftpChannel;
}