У меня есть многоступенчатая весенняя пакетная работа. Последний из которых является шагом sftp. Я пытаюсь выполнить модульное тестирование всей работы (я знаю, что могу выполнять модульное тестирование каждого шага, но в любом случае мне придется столкнуться с этой проблемой). Я определил тестовый профиль в контексте своего приложения, который содержит bean-компоненты, которые я использую для тестирования. Мой нетестовый sftp успешно работает и корректно передает файлы. Тем не менее, при попытке использовать локальный хост для тестирования что-то идет не так. Я читал подобные вопросы, такие как Использование Apache Mina в качестве фиктивного/в памяти SFTP-сервера для модульного тестирования, что было полезно, но не совсем то, что я ищу.
Что в настоящее время происходит, когда я запускаю свой тест, так это то, что программа останавливается, когда достигает следующей строки в моем коде:
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"/>
Любые идеи, почему мой файл не доставляется?
Заранее спасибо!
ОБНОВЛЕНИЕ
Позвольте мне добавить больше кода... Мой весенний пакетный шаг просто вызывает тасклет, который принимает:
p:sftpChannel-ref="outputChannel"
Мой тасклет устанавливает sftpChannel следующим образом
public void setSftpChannel(MessageChannel sftpChannel) {
this.sftpChannel = sftpChannel;
}
Проведя еще несколько исследований, моя проблема, безусловно, заключается в том, что MessageChannel блокируется на неопределенный срок, что задокументировано в весенних документах здесь
По какой-то причине, когда я использую перегруженный метод send(Message, long), он по-прежнему блокируется на неопределенный срок, даже когда он достигает времени, которое я указываю в long.
У меня остается вопрос, почему блокируется MessageChannel? И почему даже когда я указываю таймаут?
sftpChannel
это именно вашoutputChannel
из конфига? 2. Попробуйте включить ведение журнала DEBUG дляorg.springframework.integration
category и просмотреть журналы результатов после отправки сообщения. - person Artem Bilan   schedule 27.12.2013log4j.properties
(или соответствующий вашей структуре ведения журнала) в тестовых ресурсах и настроить DEBUG для пакета SI. - person Artem Bilan   schedule 27.12.2013ResourcelessTransactionManager - Creating new transaction with name [null]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
- person user821863   schedule 27.12.2013send(Message)
строки моего кода. В очередной раз благодарим за помощь. - person user821863   schedule 28.12.2013channel.send()
и копнуть дальше, где ваш тред заблокирован?.. - person Artem Bilan   schedule 28.12.2013