简体   繁体   English

同步工厂删除sftp:inbound-channel-adapter的文件夹

[英]Synchronization-factory deletes folder for sftp:inbound-channel-adapter

I have this issue where the first time this code is processed, it works well, but then the second time (first and second run is based on the set cron), it looks for a file in the failed folder and then deletes the success folder and copies it into the failed folder. 我遇到的问题是,第一次处理此代码,效果很好,但是第二次(第一次和第二次运行基于设置的cron),它将在失败的文件夹中查找文件,然后删除成功文件夹并将其复制到失败的文件夹中。 I have no idea why this is happening?? 我不知道为什么会这样?

<int-sftp:inbound-channel-adapter
    id="sftpInboundAdapter" 
    session-factory="sftpSessionFactory"
    remote-directory="${remote}"
    local-directory="${local.download.folder}"
    delete-remote-files="false"
    channel="InboundChannel"
    filter="CompositeIncomingFilesFilter"
    auto-startup="true">
    <int:poller cron="*/60 * * * * ?" error-channel="PollerErrorChannel">
        <int:transactional transaction-manager="transactionManager" synchronization-factory="syncFactory" />
    </int:poller>
</int-sftp:inbound-channel-adapter>

<bean id="transactionManager" class="org.springframework.integration.transaction.PseudoTransactionManager" />

<int:transaction-synchronization-factory id="syncFactory" >
    <int:after-commit expression="payload.renameTo(new java.io.File('${local.download.folder}' + 'success/' + payload.name))" channel="afterCommitSuccessChannel" />
    <int:after-rollback expression="payload.renameTo(new java.io.File('${local.download.folder}' + 'failed/' + payload.name))" channel="afterRollbackFailedChannel" />
</int:transaction-synchronization-factory>

<int:channel id="afterCommitSuccessChannel" />
<int:channel id="afterRollbackFailedChannel" />

<int:logging-channel-adapter id="afterCommitSuccessChannel" expression="'File saved and processed: ' + payload"  level="INFO" />
<int:logging-channel-adapter id="afterRollbackFailedChannel" expression="'File was rollbacked: ' + payload"  level="INFO" />

<bean id="CompositeIncomingFilesFilter" class="org.springframework.integration.file.filters.CompositeFileListFilter">
    <constructor-arg>
        <list>
            <bean id="SftpFilterAlreadyDownloadedFiles" class="org.springframework.integration.sftp.filters.SftpPersistentAcceptOnceFileListFilter">
                <constructor-arg index="0" ref="persistingMetadataStore" />
                <constructor-arg index="1" value="prefix_" />
                <property name = "flushOnUpdate" value = "true"/>
            </bean>         
            <bean id="SftpFilterSimple" class="org.springframework.integration.sftp.filters.SftpSimplePatternFileListFilter">
                <constructor-arg index="0" value="*123*.txt" />
            </bean>
        </list>
    </constructor-arg>      
</bean>

My logs display the following: 我的日志显示以下内容:

    2018-10-23 11:29:04.597  INFO 12244 --- [ask-scheduler-2] o.s.integration.handler.LoggingHandler   : File saved and processed: true
File saved and processed: true
2018-10-23 11:30:00.002  INFO 12244 --- [ask-scheduler-4] o.s.i.file.FileReadingMessageSource      : Created message: [GenericMessage [payload=\local\failed, headers={id=6afc5dfb-5dd4-b234-5c35-a60a42931524, timestamp=1540287000002}]]
Created message: [GenericMessage [payload=\local\failed, headers={id=6afc5dfb-5dd4-b234-5c35-a60a42931524, timestamp=1540287000002}]]
2018-10-23 11:30:00.023 ERROR 12244 --- [ask-scheduler-4] i.a.ErrorMessageLoggerActivator          : Message containing error inside channel: GenericMessage [payload=\local\failed, headers={id=6afc5dfb-5dd4-b234-5c35-a60a42931524, timestamp=1540287000002}]
Message containing error inside channel: GenericMessage [payload=\local\failed, headers={id=6afc5dfb-5dd4-b234-5c35-a60a42931524, timestamp=1540287000002}]
2018-10-23 11:30:00.023 ERROR 12244 --- [ask-scheduler-4] i.a.ErrorMessageLoggerActivator          : ErrorMessageLoggerActivator exception: 
ErrorMessageLoggerActivator exception: 
2018-10-23 11:30:17.180  WARN 12244 --- [ask-scheduler-4] sftpInboundLogger                : \local\failed
\local\failed
2018-10-23 11:30:17.192  INFO 12244 --- [ask-scheduler-4] o.s.integration.handler.LoggingHandler   : File was rollbacked: false
File was rollbacked: false
2018-10-23 11:30:17.193 ERROR 12244 --- [ask-scheduler-4] i.e.InboundStreamErrorHandler            : java.io.FileNotFoundException: \local\failed (Access is denied)
java.io.FileNotFoundException: \local\failed (Access is denied)
2018-10-23 11:31:00.001  INFO 12244 --- [ask-scheduler-5] o.s.i.file.FileReadingMessageSource      : Created message: [GenericMessage [payload=\local\success, headers={id=4e12f55a-2b2a-ca79-fad3-1325b7b698fa, timestamp=1540287060001}]]
Created message: [GenericMessage [payload=\local\success, headers={id=4e12f55a-2b2a-ca79-fad3-1325b7b698fa, timestamp=1540287060001}]]
2018-10-23 11:31:00.022  WARN 12244 --- [ask-scheduler-5] sftpInboundLogger                : \local\success
\local\success
2018-10-23 11:31:00.032  INFO 12244 --- [ask-scheduler-5] o.s.integration.handler.LoggingHandler   : File was rollbacked: true
File was rollbacked: true
2018-10-23 11:31:00.034 ERROR 12244 --- [ask-scheduler-5] i.a.ErrorMessageLoggerActivator          : Message containing error inside channel: ErrorMessage [payload=org.springframework.integration.transformer.MessageTransformationException: Failed to transform Message; nested exception is org.springframework.messaging.MessagingException: failed to transform File Message; nested exception is java.io.FileNotFoundException: \local\success (Access is denied), failedMessage=GenericMessage [payload=\local\success, headers={id=4e12f55a-2b2a-ca79-fad3-1325b7b698fa, timestamp=1540287060001}], failedMessage=GenericMessage [payload=\local\success, headers={id=4e12f55a-2b2a-ca79-fad3-1325b7b698fa, timestamp=1540287060001}], headers={id=9ac1bff3-2296-6166-115e-1e6fbc2ed304, timestamp=1540287060033}]
Message containing error inside channel: ErrorMessage [payload=org.springframework.integration.transformer.MessageTransformationException: Failed to transform Message; nested exception is org.springframework.messaging.MessagingException: failed to transform File Message; nested exception is java.io.FileNotFoundException: \local\success (Access is denied), failedMessage=GenericMessage [payload=\local\success, headers={id=4e12f55a-2b2a-ca79-fad3-1325b7b698fa, timestamp=1540287060001}], failedMessage=GenericMessage [payload=\local\success, headers={id=4e12f55a-2b2a-ca79-fad3-1325b7b698fa, timestamp=1540287060001}], headers={id=9ac1bff3-2296-6166-115e-1e6fbc2ed304, timestamp=1540287060033}]
2018-10-23 11:31:00.043 ERROR 12244 --- [ask-scheduler-5] i.a.ErrorMessageLoggerActivator          : ErrorMessageLoggerActivator exception: 

org.springframework.integration.transformer.MessageTransformationException: Failed to transform Message; nested exception is org.springframework.messaging.MessagingException: failed to transform File Message; nested exception is java.io.FileNotFoundException: \local\success (Access is denied), failedMessage=GenericMessage [payload=\local\success, headers={id=4e12f55a-2b2a-ca79-fad3-1325b7b698fa, timestamp=1540287060001}]
    at org.springframework.integration.transformer.MessageTransformingHandler.handleRequestMessage(MessageTransformingHandler.java:95)
    at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)
    at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
    at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:148)
    at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:121)
    at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:89)
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:425)
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:375)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45)
    at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105)
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.handleMessage(SourcePollingChannelAdapter.java:210)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:272)
    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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    at com.sun.proxy.$Proxy130.call(Unknown Source)
    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)
Caused by: org.springframework.messaging.MessagingException: failed to transform File Message; nested exception is java.io.FileNotFoundException: \local\success (Access is denied)
    at org.springframework.integration.file.transformer.AbstractFilePayloadTransformer.transform(AbstractFilePayloadTransformer.java:101)
    at org.springframework.integration.transformer.MessageTransformingHandler.handleRequestMessage(MessageTransformingHandler.java:89)
    ... 43 common frames omitted
Caused by: java.io.FileNotFoundException: \local\success (Access is denied)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at org.springframework.util.FileCopyUtils.copyToByteArray(FileCopyUtils.java:92)
    at org.springframework.integration.file.transformer.FileToByteArrayTransformer.transformFile(FileToByteArrayTransformer.java:32)
    at org.springframework.integration.file.transformer.FileToByteArrayTransformer.transformFile(FileToByteArrayTransformer.java:28)
    at org.springframework.integration.file.transformer.AbstractFilePayloadTransformer.transform(AbstractFilePayloadTransformer.java:87)
    ... 44 common frames omitted

ErrorMessageLoggerActivator exception: 
org.springframework.integration.transformer.MessageTransformationException: Failed to transform Message; nested exception is org.springframework.messaging.MessagingException: failed to transform File Message; nested exception is java.io.FileNotFoundException: \local\success (Access is denied), failedMessage=GenericMessage [payload=\local\success, headers={id=4e12f55a-2b2a-ca79-fad3-1325b7b698fa, timestamp=1540287060001}]
    at org.springframework.integration.transformer.MessageTransformingHandler.handleRequestMessage(MessageTransformingHandler.java:95)
    at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)
    at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:127)
    at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
    at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:148)
    at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:121)
    at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:89)
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:425)
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:375)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115)
    at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:45)
    at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:105)
    at org.springframework.integration.endpoint.SourcePollingChannelAdapter.handleMessage(SourcePollingChannelAdapter.java:210)
    at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:272)
    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 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
    at com.sun.proxy.$Proxy130.call(Unknown Source)
    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)
Caused by: org.springframework.messaging.MessagingException: failed to transform File Message; nested exception is java.io.FileNotFoundException: \local\success (Access is denied)
    at org.springframework.integration.file.transformer.AbstractFilePayloadTransformer.transform(AbstractFilePayloadTransformer.java:101)
    at org.springframework.integration.transformer.MessageTransformingHandler.handleRequestMessage(MessageTransformingHandler.java:89)
    ... 43 common frames omitted
Caused by: java.io.FileNotFoundException: \local\success (Access is denied)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at org.springframework.util.FileCopyUtils.copyToByteArray(FileCopyUtils.java:92)
    at org.springframework.integration.file.transformer.FileToByteArrayTransformer.transformFile(FileToByteArrayTransformer.java:32)
    at org.springframework.integration.file.transformer.FileToByteArrayTransformer.transformFile(FileToByteArrayTransformer.java:28)
    at org.springframework.integration.file.transformer.AbstractFilePayloadTransformer.transform(AbstractFilePayloadTransformer.java:87)
    ... 44 common frames omitted

and then it moves the folder with the file under failure 然后将失败的文件移动到文件夹中

OK. 好。 So, when you rename a /success directory to something else, it disappears and, of course, you can't write to the /success anymore. 因此,当您将/success目录重命名为其他目录时,它消失了,当然,您将无法再写入/success You have to have it to be created in advice for writing files into it. 您必须在将文件写入其中的建议中创建它。 You need to consider to rename each file individually if you don't have control over /success directory created before writing files. 如果您无法控制在写入文件之前创建的/success目录,则需要考虑分别重命名每个文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM