2016-09-19 4 views
0

Ich habe eine Datei, die SI aus dem Ordner liest, aber meine Anwendung wird auf zwei Clustern bereitgestellt, so dass die Datei wird zweimal gelesen, so dass ich Datei-Schließmechanismus im Frühling Integration verwendet Aber in diesem Fall habe ich festgestellt, dass meine Dateien überhaupt nicht verarbeitet werden. Was ich vermisse?Wie Dateisperre Mechanismus in SI zum Lesen von Dateien verwendet

UPDATE: Ich verwende Filelocker Klasse auf diese Weise FileInbound Adapter

private FileInboundChannelAdapterSpec readFilefromDirectory(){ 
     return Files.inboundAdapter(getInboxDirectory()) 
       .autoCreateDirectory(true) 
       .locker(asFileLocker) 
       .preventDuplicates(); 
    } 

@Component 
public class ASFileLocker implements FileLocker{ 
    @Autowired 
    Properties properties; 

    @Override 
    public boolean lock(File fileToLock) { 
     try{ 
      if(properties.getProperty("fileName").equalsIgnoreCase(fileToLock.getName())){ 
       return false; 
      } 
      else{ 
       properties.setProperty("fileName", fileToLock.getName()); 
       return true; 
      } 

     }catch(Exception e){ 
      return false; 
     } 
    } 

    @Override 
    public boolean isLockable(File file) { 
     String fileName= properties.getProperty("fileName"); 
     if(fileName.equalsIgnoreCase(file.getName())){ 
      return true; 
     } 
     else{ 
      return false; 
     } 

    } 

    @Override 
    public void unlock(File fileToUnlock) { 

    } 

Antwort

1

Um den Dateiinhalt Sie FileChannel vom FileLock verwenden zu lesen verwenden.

Aber es gibt keinen Zugriff auf dieses Objekt von der NioFileLocker.

Verwenden Sie stattdessen FileSystemPersistentAcceptOnceFileListFilter. Mit geteilt MetadataStore, natürlich. In diesem Fall wird Ihre Datei nur von einer Instanz Ihrer Anwendung abgeholt.

+0

Ich habe meine Frage mit Code, den ich verwende, aktualisiert. Ist das korrekt? –

+0

Ihr Code macht keinen Sinn. Es sperrt nichts und es ist nicht Thread-sicher. Warum einfach nicht mit der Empfehlung folgen und 'FileSystemPersistentAcceptOnceFileListFilter' nicht verwenden: http://docs.spring.io/spring-integration/reference/html/files.html#file-reading? –

Verwandte Themen