如何使用SI中提供的文件锁定机制进行文件读取

时间:2016-09-19 16:44:27

标签: spring-integration

我有一个文件,SI从文件夹中读取,但我的应用程序部署在两个群集上,因此文件被读取两次,所以我使用了spring Integration中提供的文件锁定机制,但在这种情况下,我发现我的文件是根本没有处理。我错过了什么?

更新:我使用FileInbound adapter

以这种方式使用FileLocker类
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 个答案:

答案 0 :(得分:1)

要阅读文件内容,您必须使用FileChannel中的FileLock

但是NioFileLocker无法访问该对象。

请考虑使用FileSystemPersistentAcceptOnceFileListFilter。 当然,共享MetadataStore。在这种情况下,您的文件将仅由您的应用程序的一个实例选取。