如何配置动态入境Spring集成FTP?(how to configure Spring integ

2019-10-19 01:59发布

我是新来的春天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)如果我通过像用户名/密码证书错误,那么它将无限显示栈跟踪。 我想那个春天集成模块,应尽量与仅一次错误的凭据一次,并打印堆栈跟踪来解决。 我把它给调试在内的代码,发现原因。 事实上,当春天集成模块不能建立条件,它打印堆栈跟踪,并在内部重新安排与相同的凭据(在这种情况下错误的凭据)连续连接尝试。 难道我错过了这方面的任何配置?

Answer 1:

看到这个春天论坛主题动态入站通道适配器创造 ,并按照其链接(特别是这一个 )。

从本质上讲,你让主上下文(S)FTP背景的母公司,因此入站适配器可以参考的通道。



文章来源: how to configure Spring integration FTP for dynamic inbound?