2016-09-30 54 views
0

我一直在研究Spring集成文件支持,我需要將文件從輸入目錄移動到輸出目錄。成功移動到輸出目錄後,應將其歸檔並從輸入目錄中刪除。我正在使用下面的配置來實現這一點。Spring集成 - 如何處理來自LoggingHandler的異常

請糾正我,如果我的配置可以更好的方式。

Spring集成配置:

<int:channel id="inboundFileChannel"/> 
<int:channel id="outboundFileChannel"/> 
<int:channel id="archiveFileChannel"/> 

<int-file:inbound-channel-adapter channel="inboundFileChannel" 
           directory="file://${file.input.dir}" filename-pattern="*.txt" auto-startup="true" auto-create-directory="false"> 
    <int:poller fixed-rate="${file.poller.interval}"/> 
</int-file:inbound-channel-adapter> 

<int:service-activator input-channel="inboundFileChannel" output-channel="outboundFileChannel" ref="fileHandler"/> 

<int-file:outbound-gateway request-channel="outboundFileChannel" reply-channel ="archiveFileChannel" directory="file://${file.output.dir}" 
          mode="REPLACE" delete-source-files="false" auto-create-directory="false" /> 

<int:service-activator input-channel="archiveFileChannel" ref="archiveFileHandler" method="copyToArchiveDirectory"/> 

<int:logging-channel-adapter channel="inboundFileChannel" level="DEBUG"/> 

<bean id="fileHandler" class="FileHandler"/> 
<bean id="archiveFileHandler" class="ArchiveFileHandler"/> 

我在服務激活代碼,如果歸檔目錄不存在,它應該終止應用程序。因此,在運行應用程序時,第一次移動文件後,我刪除了歸檔目錄。然後我將新文件放入輸入目錄,文件被輪詢併發送到一個通道,但服務激活器處理程序未被拾取,並且不檢查存檔目錄是否存在。

我從日誌中發現消息第一次發送到ServiceActivatorHandler並移動了文件,但第二次消息發送到LoggingHandler。

2016-09-30 14:27:36,593 [task-scheduler-1] [file.FileReadingMessageSource] INFO - Created message: [GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}]] 
2016-09-30 14:27:36,593 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Poll resulted in Message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}] 
2016-09-30 14:27:36,593 [task-scheduler-1] [channel.DirectChannel] DEBUG - preSend on channel 'inboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}] 
2016-09-30 14:27:36,624 [task-scheduler-1] [handler.ServiceActivatingHandler] DEBUG - ServiceActivator for [org.spr[email protected]3d1024ab] received message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}] 
2016-09-30 14:27:36,640 [task-scheduler-1] [handlers.FileHandler] INFO - File : c:\tmp\csvfiles\input\test1.txt is copied to : c:/tmp/csvfiles/output/ 
2016-09-30 14:27:36,640 [task-scheduler-1] [channel.DirectChannel] DEBUG - preSend on channel 'outboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=f53fbb89-d2f2-caab-f40b-cbd825238950, timestamp=1475263656640}] 
2016-09-30 14:27:36,640 [task-scheduler-1] [file.FileWritingMessageHandler] DEBUG - [email protected]10cd27 received message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=f53fbb89-d2f2-caab-f40b-cbd825238950, timestamp=1475263656640}] 
2016-09-30 14:27:36,671 [task-scheduler-1] [channel.DirectChannel] DEBUG - preSend on channel 'archiveFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\output\test1.txt, headers={file_originalFile=c:\tmp\csvfiles\input\test1.txt, id=ac2a9c1e-243d-5702-ef23-f715ebce18f8, timestamp=1475263656671}] 
2016-09-30 14:27:36,671 [task-scheduler-1] [handler.ServiceActivatingHandler] DEBUG - ServiceActivator for [org.spr[email protected]5f6b71ba] received message: GenericMessage [payload=c:\tmp\csvfiles\output\test1.txt, headers={file_originalFile=c:\tmp\csvfiles\input\test1.txt, id=ac2a9c1e-243d-5702-ef23-f715ebce18f8, timestamp=1475263656671}] 
2016-09-30 14:27:36,671 [task-scheduler-1] [handlers.FileHandler] INFO - Service Activator Activated 
2016-09-30 14:27:36,671 [task-scheduler-1] [handlers.FileHandler] INFO - File name : test1.txt 
2016-09-30 14:27:36,702 [task-scheduler-1] [utility.FileUtility] INFO - Archive file name : test1_2016-09-30_14-27-36-702.txt 
2016-09-30 14:27:36,702 [task-scheduler-1] [handlers.FileHandler] INFO - c:\tmp\csvfiles\output 
2016-09-30 14:27:36,702 [task-scheduler-1] [handlers.FileHandler] INFO - c:\tmp\csvfiles\archive 
2016-09-30 14:27:36,718 [task-scheduler-1] [handlers.FileHandler] INFO - Successfully archived file : test1.txt 
2016-09-30 14:27:36,718 [task-scheduler-1] [handlers.FileHandler] INFO - Source FIle Name with Path : c:\tmp\csvfiles\input\test1.txt 
2016-09-30 14:27:36,718 [task-scheduler-1] [handlers.FileHandler] INFO - Successfully deleted file : test1.txtfrom directory: c:/tmp/csvfiles/input/ 
2016-09-30 14:27:36,718 [task-scheduler-1] [handler.ServiceActivatingHandler] DEBUG - handler 'ServiceActivator for [org.spr[email protected]5f6b71ba]' produced no reply for request Message: GenericMessage [payload=c:\tmp\csvfiles\output\test1.txt, headers={file_originalFile=c:\tmp\csvfiles\input\test1.txt, id=ac2a9c1e-243d-5702-ef23-f715ebce18f8, timestamp=1475263656671}] 
2016-09-30 14:27:36,718 [task-scheduler-1] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'archiveFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\output\test1.txt, headers={file_originalFile=c:\tmp\csvfiles\input\test1.txt, id=ac2a9c1e-243d-5702-ef23-f715ebce18f8, timestamp=1475263656671}] 
2016-09-30 14:27:36,718 [task-scheduler-1] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'outboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=f53fbb89-d2f2-caab-f40b-cbd825238950, timestamp=1475263656640}] 
2016-09-30 14:27:36,718 [task-scheduler-1] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'inboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test1.txt, headers={id=4f03f37d-7bb4-d630-72c0-360fd07d3b88, timestamp=1475263656593}] 
2016-09-30 14:27:36,718 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:37,250 [task-scheduler-2] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:38,248 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:39,250 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:40,249 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:41,247 [task-scheduler-4] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:42,246 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:43,244 [task-scheduler-5] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:44,242 [task-scheduler-2] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:45,241 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:46,239 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:47,238 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:48,252 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:49,239 [task-scheduler-8] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:50,241 [task-scheduler-8] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:51,239 [task-scheduler-8] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:52,209 [task-scheduler-5] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:53,278 [task-scheduler-5] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:54,247 [task-scheduler-2] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:55,245 [task-scheduler-2] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:56,252 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:57,238 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:58,253 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:27:59,238 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:00,252 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:01,249 [task-scheduler-7] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:02,249 [task-scheduler-10] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:03,247 [task-scheduler-5] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:04,249 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:05,248 [task-scheduler-3] [file.FileReadingMessageSource] DEBUG - Added to queue: [c:\tmp\csvfiles\input\test2.txt] 
2016-09-30 14:28:05,248 [task-scheduler-3] [file.FileReadingMessageSource] INFO - Created message: [GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}]] 
2016-09-30 14:28:05,248 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Poll resulted in Message: GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}] 
2016-09-30 14:28:05,248 [task-scheduler-3] [channel.DirectChannel] DEBUG - preSend on channel 'inboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}] 
2016-09-30 14:28:05,248 [task-scheduler-3] [handler.LoggingHandler] DEBUG - org.springframework.integration.handler.LoggingHandler#0 received message: GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}] 
2016-09-30 14:28:05,263 [task-scheduler-3] [handler.LoggingHandler] DEBUG - c:\tmp\csvfiles\input\test2.txt 
2016-09-30 14:28:05,279 [task-scheduler-3] [channel.DirectChannel] DEBUG - postSend (sent=true) on channel 'inboundFileChannel', message: GenericMessage [payload=c:\tmp\csvfiles\input\test2.txt, headers={id=be245baf-52b4-8196-714b-8003b55d347b, timestamp=1475263685248}] 
2016-09-30 14:28:06,246 [task-scheduler-3] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:07,248 [task-scheduler-6] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:08,232 [task-scheduler-1] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:09,261 [task-scheduler-9] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 
2016-09-30 14:28:10,244 [task-scheduler-9] [endpoint.SourcePollingChannelAdapter] DEBUG - Received no Message during the poll, returning 'false' 

由於我刪除了歸檔目錄(應用程序正在運行時),所以將消息發送到LoggingHandler。 任何人都可以建議如何處理該異常,我可以編寫代碼來終止應用程序。

如果我缺少任何東西,請糾正我。

回答

1
<int:channel id="inboundFileChannel"/> 

<int:service-activator input-channel="inboundFileChannel" output-channel="outboundFileChannel" ref="fileHandler"/> 

<int:logging-channel-adapter channel="inboundFileChannel" level="DEBUG"/> 

當你有兩個消費者訂閱相同的信道(默認DirectChannel)消息將去兩個消費者交替 - 循環分配。

如果您希望該文件轉到兩個使用者,請將其更改爲發佈/訂閱渠道。

<int:publish-subscribe-channel id="inboundFileChannel"/> 
+0

謝謝加里。它幫助。 – Abhilash