2016-09-19 8 views
0

私はSIがフォルダから読み込む1つのファイルを持っていますが、私のアプリケーションは2つのクラスタに配備されているので、ファイルは2回読み込まれるので、その場合、私が見つけたのは、私のファイルがまったく処理されていないということです。私は何が足りないのですか?ファイル読み込みのためにSIで提供されるファイルロックメカニズムの使い方

UPDATE:私はあなたがFileLockからFileChannelを使用する必要があり、ファイルの内容を読むにはFileInboundアダプタ

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) { 

    } 

答えて

1

を使用して、このようにFileLockerクラスを使用しています。

しかし、NioFileLockerからそのオブジェクトへのアクセスはありません。

FileSystemPersistentAcceptOnceFileListFilterを代わりに使用することを検討してください。 共有しているのはもちろん、MetadataStoreです。この場合、ファイルはアプリケーションの1つのインスタンスによってのみ選択されます。

+0

私はこのコードを使って自分の質問を更新しました。これは正しいですか? –

+0

あなたのコードは意味をなさない。何もロックせず、スレッドセーフでもありません。なぜ、推奨に従わず、 'FileSystemPersistentAcceptOnceFileListFilter'を使わないのはなぜですか?http://docs.spring.io/spring-integration/reference/html/files.html#file-reading? –

関連する問題