2017-08-23 1 views
0

J'ai un dossier d'intégration qui obtiennent la charge utile xml de FTP, puis utiliser le canal sortant http pour envoyer la charge utile au webservice, ftp inbound-channel-adaptateur a un obligatoire attribut nommé local-répertoire, les fichiers ftp distants seront téléchargés ici, mais quand je redémarre, semble tous les fichiers dans le répertoire local seront traités à nouveau, puis-je savoir comment éviter cela? Une façon possible est de supprimer le fichier local dans ftp inbound-canal-adaptateur, comment le faire, pouvez-vous conseiller?comment supprimer le fichier local dans ftp inbound-channel-adapter de Spring integration

grâce

Mes configurations d'intégration de printemps

<ftp:inbound-channel-adapter 
     channel="requestChannel" 
     session-factory="ftpClientSessionFactory" 
     remote-directory="/outbound" 
     local-directory="/temp" 
     auto-create-local-directory="true" 
     delete-remote-files="false" 
     filename-pattern="*.xml" 
     temporary-file-suffix=".writing"> 
    <int:poller fixed-delay="5000" max-messages-per-poll="10"/> 
</ftp:inbound-channel-adapter> 


<int:chain id="inboundChain" input-channel="requestChannel" output-channel="replyChannel"> 

    <int:transformer ref="xmlToJsonTransformer" /> 
    <int:transformer ref="jsonToMapTransformer" /> 
    <int:header-enricher> 
     <int:header name="Content-Type" value="application/json" overwrite="true"/> 
    </int:header-enricher> 
    <http:outbound-gateway expected-response-type="java.lang.String" 
          url="http://localhost:8080/postService/postupdate" 
          http-method="POST" 
          extract-request-payload="true" 
          request-factory="requestFactory"> 
    </http:outbound-gateway> 
</int:chain> 

Répondre

1

Ajouter un ExpressionEvaluatingRequestHandlerAdvice à la passerelle sortante pour supprimer le fichier. Voir le Expression Evaluating Advice Demo in the retry-and-more sample pour un exemple - il supprime ou renomme le fichier, selon le succès ou l'échec.

+0

semble qu'il ne fonctionne pas après avoir ajouté ExpressionEvaluatingRequestHandlerAdvice dans mon http: passerelle sortante, pouvez-vous partager plus de détails? est-ce dû à ma passerelle sortante est http?

+0

Ne pas mettre config dans les commentaires; c'est difficile à lire. Editez la question à la place. '" payload.delete() "' - la charge utile n'est plus un fichier; vous devez ajouter un en-tête avant le premier transformateur - copier la charge utile dans un en-tête 'name =" file_originalFile "expression =" payload "'. Ensuite, dans votre conseil, utilisez 'headers ['file_originalFile']. Delete()'. –

0

Merci de advise Gray, voici ma configuration corrigée

<int:chain id="inboundChain" input-channel="requestChannel" output-channel="replyChannel"> 
     <int:header-enricher> 
      <int:header name="file_originalFile" expression="payload"/> 
      <int:header name="file-name" expression="payload.name"/> 
      <int:header name="file-failed-path" value="/project/ftp/failed/"/> 
      <int:header name="Content-Type" value="application/json" overwrite="true"/> 
     </int:header-enricher> 

     <int:transformer ref="xmlToJsonTransformer" /> 
     <int:transformer ref="jsonToMapTransformer" /> 

     <http:outbound-gateway expected-response-type="java.lang.String" 
           url="http://localhost:8080/postService/postupdate" 
           http-method="POST" 
           extract-request-payload="true" 
           request-factory="requestFactory"> 
      <http:request-handler-advice-chain> 
       <bean class="org.springframework.integration.handler.advice.ExpressionEvaluatingRequestHandlerAdvice"> 
        <property name="onSuccessExpression" value="headers['file_originalFile'].delete()" /> 
        <property name="onFailureExpression" 
           value="headers['file_originalFile'].renameTo(new java.io.File(headers['file-failed-path']+headers['file-name']))"/> 
       </bean> 
      </http:request-handler-advice-chain> 
     </http:outbound-gateway>