我遇到这样的问题:第一次处理此代码,效果很好,但是第二次(第一次和第二次运行基于设置的cron),它在失败的文件夹中查找文件,然后删除成功文件夹并将其复制到失败文件夹。我不知道为什么会这样?
<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>
我的日志显示以下内容:
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
答案 0 :(得分:0)
然后将失败的文件移动到文件夹中
好。因此,当您将/success
目录重命名为其他目录时,该目录将消失,并且当然不能再写入/success
。您必须在将文件写入其中的建议中创建它。如果您无法控制在写入文件之前创建的/success
目录,则需要考虑分别重命名每个文件。