我是新来的春天FTP整合。 我想下载使用动态参数,如主机,用户名,密码等从数据库从FTP服务器的文件。 我明白了如何使用从属性文件中的静态参数下载的文件。 我已经成功地通过参考使用动态参数上传文件(FTP出站 ) 动态FTP样品的例子。 请帮我配置“入站动态FTP”。
我已经成功地实现这一点,但我现在面临一些新的问题,这个解决方案。
场景:假设FTP服务器主机名是“ftp.foo.in”,并有一个文件夹类似的结构
/ (root) |- countries |- states |- cities
问题:1)在访问子文件,它抛出的UnknownHostException。 例如,如果我尝试使用主机名=“ftp.foo.in/countries/states”连接,然后将其抛出异常,如下所示:
ERROR: org.springframework.integration.handler.LoggingHandler - java.lang.IllegalStateException: failed to create FTPClient
at org.springframework.integration.ftp.session.AbstractFtpSessionFactory.getSession(AbstractFtpSessionFactory.java:139)
at com.xxx.yyy.zzz.FTPInboundRecursiveFileSynchronizer.synchronizeToLocalDirectory(Unknown Source)
at com.xxx.yyy.zzz.FTPInboundRecursiveFileSynchronizer.synchronizeToLocalDirectory(Unknown Source)
at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.receive(AbstractInboundFileSynchronizingMessageSource.java:146)
at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:111)
at org.springframework.integration.endpoint.AbstractTransactionSynchronizingPollingEndpoint.doPoll(AbstractTransactionSynchronizingPollingEndpoint.java:67)
at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:146)
at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:144)
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:236)
at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:52)
at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:49)
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:231)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:53)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.net.UnknownHostException: ftp.foo.in/countries/states
at java.net.InetAddress.getAllByName0(InetAddress.java:1215)
at java.net.InetAddress.getAllByName(InetAddress.java:1127)
at java.net.InetAddress.getAllByName(InetAddress.java:1063)
at java.net.InetAddress.getByName(InetAddress.java:1013)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:189)
at org.springframework.integration.ftp.session.AbstractFtpSessionFactory.createClient(AbstractFtpSessionFactory.java:152)
at org.springframework.integration.ftp.session.AbstractFtpSessionFactory.getSession(AbstractFtpSessionFactory.java:136)
... 22 more
在哪里,如果我尝试使用org.apache.commons.net.ftp.FtpClient的changeWorkingDirectory()来访问子文件,它成功地执行。
2)如果我通过像用户名/密码证书错误,那么它将无限显示栈跟踪。 我想那个春天集成模块,应尽量与仅一次错误的凭据一次,并打印堆栈跟踪来解决。 我把它给调试在内的代码,发现原因。 事实上,当春天集成模块不能建立条件,它打印堆栈跟踪,并在内部重新安排与相同的凭据(在这种情况下错误的凭据)连续连接尝试。 难道我错过了这方面的任何配置?