我有一个文件,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) {
}
答案 0 :(得分:1)
要阅读文件内容,您必须使用FileChannel
中的FileLock
。
但是NioFileLocker
无法访问该对象。
请考虑使用FileSystemPersistentAcceptOnceFileListFilter
。
当然,共享MetadataStore
。在这种情况下,您的文件将仅由您的应用程序的一个实例选取。