即使我的应用程序停止,Spring-integration-ftp轮询文件

时间:2017-02-08 14:59:59

标签: spring spring-integration spring-batch spring-integration-sftp

作为问题的后续行动 -

Same file gets picked up again and again in spring-ftp but with different names

我的application.xml中有以下配置

 <?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns:int="http://www.springframework.org/schema/integration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:file="http://www.springframework.org/schema/integration/file"
    xmlns:int-stream="http://www.springframework.org/schema/integration/stream"
    xmlns:int-ftp="http://www.springframework.org/schema/integration/ftp"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/integration
        http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/integration/file
        http://www.springframework.org/schema/integration/file/spring-integration-file.xsd
        http://www.springframework.org/schema/integration/stream
        http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd
        http://www.springframework.org/schema/integration/ftp
        http://www.springframework.org/schema/integration/ftp/spring-integration-ftp.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd">

    <int:poller id="poller" task-executor="synchTaskExecutor" default="true" fixed-delay="1000" />

    <beans:bean id="ftpClientFactory"
          class="com.everge.springframework.integration.ftp.session.EvergeFtpSessionFactory">
        <beans:property name="host" value="111.93.128.170"/>
        <beans:property name="port" value="21"/>
        <beans:property name="username" value="singha"/>
        <beans:property name="password" value="singha16"/>
        <beans:property name="clientMode" value="2"></beans:property>
    </beans:bean>

    <beans:bean id="ftpOutClientFactory"
          class="org.springframework.integration.ftp.session.DefaultFtpSessionFactory">
        <beans:property name="host" value="111.93.128.170"/>
        <beans:property name="port" value="21"/>
        <beans:property name="username" value="singha"/>
        <beans:property name="password" value="singha16"/>
        <beans:property name="clientMode" value="2"></beans:property>
    </beans:bean>

    <beans:bean id="synchTaskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <beans:property name="corePoolSize" value="1"></beans:property>
        <beans:property name="maxPoolSize" value="1"></beans:property>
        <beans:property name="queueCapacity" value="1"></beans:property>
    </beans:bean>

    <beans:bean id="pqqFtpClientFactory"
          class="com.everge.springframework.integration.ftp.session.PqqEvergeFtpSessionFactory">
        <beans:property name="host" value="111.93.128.170"/>
        <beans:property name="port" value="21"/>
        <beans:property name="username" value="singha"/>
        <beans:property name="password" value="singha16"/>
        <beans:property name="clientMode" value="2"></beans:property>
    </beans:bean>

    <int:channel id="ftpChannel">
        <int:queue/>
    </int:channel>

    <beans:bean id="acceptAllFileListFilter" class="com.everge.file.processing.EvergeFileListFilter"/>

       <beans:bean id="pqqHandler" class="com.everge.pqq.PqqFileHandler">
        <beans:property name="config" ref="baseConfig"></beans:property>
    </beans:bean>

    <beans:bean id="handler" scope="prototype" class="com.everge.integration.client.FileHandler">
        <beans:property name="config" ref="baseConfig"></beans:property>
    </beans:bean>

    <beans:bean id="baseConfig" class="com.everge.config.BaseConfig" />

    <beans:bean id="ftpSplitter" class="com.everge.service.FtpSplitter" />

    <beans:bean id="fileSplitter" class="com.everge.file.processing.FileSplitter" />

    <int-ftp:outbound-channel-adapter  id="notifFtpOutBound"
                channel="pl"
                remote-directory="/ADPWG/PRCSD1"
                session-factory="ftpOutClientFactory" auto-startup="true">
        <int-ftp:request-handler-advice-chain>
            <int:retry-advice />
        </int-ftp:request-handler-advice-chain>
    </int-ftp:outbound-channel-adapter>   

   <int-ftp:outbound-channel-adapter  id="ftpOutbound"
                channel="pqqOutputFileChannel"
                remote-directory="/ADPWG/PRCSD"
                session-factory="ftpOutClientFactory" auto-startup="true">
        <int-ftp:request-handler-advice-chain>
            <int:retry-advice />
        </int-ftp:request-handler-advice-chain>
    </int-ftp:outbound-channel-adapter>

    <file:inbound-channel-adapter prevent-duplicates="false" id="filesIn1" directory="file:/Users/abhisheksingh/ddrive/everge_ws/f" auto-startup="true">
        <int:poller id="poller" task-executor="synchTaskExecutor" fixed-delay="1000"></int:poller>
    </file:inbound-channel-adapter>

    <int:service-activator input-channel="filesIn1" ref="handler" />

    <file:inbound-channel-adapter prevent-duplicates="false" id="pqqInputFileChannel" directory="file:/Users/abhisheksingh/ddrive/everge_ws/pqqReq" auto-startup="true">
        <int:poller id="poller" task-executor="synchTaskExecutor" fixed-delay="1000" />
    </file:inbound-channel-adapter>

    <int:service-activator input-channel="pqqInputFileChannel" ref="pqqHandler" />

    <file:inbound-channel-adapter  id="pqqOutputFileChannel" directory="/Users/abhisheksingh/ddrive/everge_ws/pqqResp">
        <int:poller id="poller" task-executor="synchTaskExecutor" fixed-delay="10000" />
    </file:inbound-channel-adapter>

    <int-ftp:inbound-channel-adapter id="ftpInbound"
        channel="ftpChannel"
        session-factory="ftpClientFactory"
        auto-create-local-directory="true"
        delete-remote-files="false"
        local-filter="acceptAllFileListFilter"
        local-directory="file:/Users/abhisheksingh/ddrive/everge_ws/f" auto-startup="true" >
        <int:poller id="poller"  task-executor="synchTaskExecutor" fixed-delay="1000" />
    </int-ftp:inbound-channel-adapter>


    <int-ftp:inbound-channel-adapter id="pqqFtpInbound"
        channel="ftpChannel"
        session-factory="pqqFtpClientFactory"
        auto-create-local-directory="true"
        delete-remote-files="false"
        local-filter="acceptAllFileListFilter"
        local-directory="file:/Users/abhisheksingh/ddrive/everge_ws/pqqReq" auto-startup="true" >
        <int:poller id="poller" task-executor="synchTaskExecutor" fixed-delay="1000" />
    </int-ftp:inbound-channel-adapter>

    <file:inbound-channel-adapter id="pl" directory="file:/Users/abhisheksingh/ddrive/everge_ws/notifFile" auto-startup="true">
        <int:poller id="poller" task-executor="synchTaskExecutor" fixed-delay="1000" />
    </file:inbound-channel-adapter>

</beans:beans>  

因此我会调查一个ftp位置并将轮询文件放在我本地计算机上的以下目录中 -

/用户/ abhisheksingh / ddrive /测试/ F

现在有时因为我发现了一个bug并且必须修复它,我停止了tomcat服务器。我从本地删除文件,以便下次启动服务器时,可以再次轮询同一文件。但我发现同一个文件再次被轮询。我的服务器停了!据我所知,这不应该发生。这就是为什么我发布了我的application.xml来知道这里是否有东西让线程挂起。或者是spring-integration-ftp启动一个不依赖于应用程序的守护程序线程。请让我解决这个问题。

我在tomcat日志中看到以下异常 -

Feb 17, 2017 11:49:24 PM org.apache.catalina.loader.WebappClassLoaderBase loadClass
INFO: Illegal access: this web application instance has been stopped already.  Could not load UNIX Type: L8.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1777)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createFileEntryParser(DefaultFTPFileEntryParserFactory.java:88)
        at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2263)
        at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2046)
        at org.springframework.integration.ftp.session.FtpSession.list(FtpSession.java:70)
        at org.springframework.integration.ftp.session.FtpSession.list(FtpSession.java:43)
        at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer$1.doInSession(AbstractInboundFileSynchronizer.java:236)
        at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer$1.doInSession(AbstractInboundFileSynchronizer.java:232)
        at org.springframework.integration.file.remote.RemoteFileTemplate.execute(RemoteFileTemplate.java:435)
        at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizer.synchronizeToLocalDirectory(AbstractInboundFileSynchronizer.java:232)
        at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.doReceive(AbstractInboundFileSynchronizingMessageSource.java:193)
        at org.springframework.integration.file.remote.synchronizer.AbstractInboundFileSynchronizingMessageSource.doReceive(AbstractInboundFileSynchronizingMessageSource.java:59)
        at org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:134)
        at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:224)
        at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:245)
        at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:58)
        at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:190)
        at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:186)
        at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:353)
        at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55)
        at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
        at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51)
        at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:344)
        at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
        at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

此时我非常确定spring-integration ftp poller不会让tomcat正常停止。

我使用jvisualvm进行了更多调查。我看到有任务调度程序线程启动时没有关闭./shutdown.sh调用来停止tomcat。

enter image description here

有趣的是,如果我删除pl或pqqOutputFileChannel适配器中的任何一个,则不会创建这些调度程序。

这是我的耳文的结构 -

enter image description here

  

以下是即使在日志文件中继续滚动的日志   已经在tomcat上调用了shutdown -

     

541576 DEBUG o.s.i.c.PublishSubscribeChannel - postSend(sent = true)on   channel&#39; errorChannel&#39;,message:ErrorMessage   [payload = org.springframework.core.task.TaskRejectedException:Executor   [java.util.concurrent.ThreadPoolExecutor@6d6033da [正在运行,池大小=   1,活动线程= 0,排队任务= 0,完成任务= 1114]]   不接受任务:   org.springframework.integration.util.ErrorHandlingTaskExecutor$1@570e117d,   标题= {ID = 71d77a8b-17ea-7011-3cb3-ddbf7591321f,   timestamp = 1487870801603}] 541575 DEBUG o.s.i.c.PublishSubscribeChannel    - postSend(sent = true)在频道&#39; errorChannel&#39;,message:ErrorMessage   [payload = org.springframework.core.task.TaskRejectedException:Executor   [java.util.concurrent.ThreadPoolExecutor@6d6033da [正在运行,池大小=   1,活动线程= 0,排队任务= 1,完成任务= 1113]]   不接受任务:   org.springframework.integration.util.ErrorHandlingTaskExecutor$1@44210f79,   标题= {ID = 74a26d65-4b42-da1f-CDF1-b77fea8bfdb7,   timestamp = 1487870801603}] 541576 ERROR o.s.i.handler.LoggingHandler -   org.springframework.core.task.TaskRejectedException:Executor   [java.util.concurrent.ThreadPoolExecutor@6d6033da [正在运行,池大小=   1,活动线程= 0,排队任务= 1,完成任务= 1113]]   不接受任务:   org.springframework.integration.util.ErrorHandlingTaskExecutor$1@7d7cc2a4     在   org.springframework.scheduling.concurrent.ThreadPoolTask​​Executor.execute(ThreadPoolTask​​Executor.java:296)     在   org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51)     在   org.springframework.integration.endpoint.AbstractPollingEndpoint $ Poller.run(AbstractPollingEndpoint.java:344)     在   org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)     在   org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81)     在   java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511)     在java.util.concurrent.FutureTask.run(FutureTask.java:266)at   java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.access $ 201(ScheduledThreadPoolExecutor.java:180)     在   java.util.concurrent.ScheduledThreadPoolExecutor中的$ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)     在java.lang.Thread.run(Thread.java:745)引起:   java.util.concurrent.RejectedExecutionException:任务   org.springframework.integration.util.ErrorHandlingTaskExecutor$1@7d7cc2a4   被拒绝了   java.util.concurrent.ThreadPoolExecutor@6d6033da [正在运行,池大小=   1,活动线程= 0,排队任务= 1,完成任务= 1113]   java.util.concurrent.ThreadPoolExecutor中的$ AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)     在   java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)     在   java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)     在   org.springframework.scheduling.concurrent.ThreadPoolTask​​Executor.execute(ThreadPoolTask​​Executor.java:293)     ......还有11个

     

** 541576 DEBUG o.s.i.c.PublishSubscribeChannel - postSend(sent = true)on channel&#39; errorChannel&#39;,message:ErrorMessage   [payload = org.springframework.core.task.TaskRejectedException:Executor   [java.util.concurrent.ThreadPoolExecutor@6d6033da [正在运行,池大小=   1,活动线程= 0,排队任务= 1,完成任务= 1113]]   不接受任务:   org.springframework.integration.util.ErrorHandlingTaskExecutor$1@7d7cc2a4,   标题= {ID = 26e6de67-2b70-cd7d-0c64-d21e1f8d1726,   timestamp = 1487870801603}] 541611 DEBUG   c.e.s.i.f.s.PqqEvergeFtpSessionFactory - 已连接到服务器   [111.93.128.170:21] 541638信息   c.e.s.i.f.s.PqqEvergeFtpSessionFactory - 内部   postProcessClientAfterConnect of PqqEvergeFtpSessionFactory 541778   INFO o.s.i.ftp.session.FtpSession - 文件已成功完成   转自:TEST4.PQQ 541778 DEBUG   o.s.i.f.i.FtpInboundFileSynchronizer - 传输了1个文件541779 INFO   c.e.f.p.EvergeFileListFilter - 检查文件是否已经存在   已处理/Users/abhisheksingh/ddrive/everge_ws/pqqArchive/TEST4.PQQ   541779 INFO c.e.f.p.EvergeFileListFilter - 存档文件名是   541779 INFO c.e.f.p.EvergeFileListFilter - 输入文件名是TEST4   541779 INFO c.e.f.p.EvergeFileListFilter - 存档文件名是TEST4   541779 INFO c.e.f.p.EvergeFileListFilter - 输入文件名是TEST4   541779 INFO c.e.f.p.EvergeFileListFilter - 文件已经存在   已处理TEST4 541779 ERROR c.e.f.p.EvergeFileListFilter - PQQ文件   已经处理完毕。 541779 DEBUG   o.s.i.e.SourcePollingChannelAdapter - 期间没有收到任何消息   投票,回归&#39; false&#39; 541974 DEBUG   o.s.i.e.SourcePollingChannelAdapter - 期间没有收到任何消息   民意调查,返回&#39; false&#39;

0 个答案:

没有答案