본문 바로가기

Cloud/Azure

Azure 공유 파일(File Shares) Properties 정보 가져오기

Azure 공유 폴더의 파일이 12시간 지나면 삭제하는 스케쥴러를 만들었다.

@Slf4j
@Component
public class TempFileManageScheduler {

    @Value("${azure.storage.file.connectionString}")
    private String edifactFileConnectionString;

    @Value("${azure.storage.file.share}")
    private String edifactFileShareName;
    
    private static final Long TIME_TO_LIVE_HOURS = 6L;
    private static final String TEMP_DIRECTORY_PATH = "temp/"; 
	 
    @Scheduled(fixedDelay = 100000)
    public void deleteTempFile() {
    	
        try {
        	
            CloudFileShare fileShare = AzureFileHandler.getFileShare(edifactFileConnectionString, edifactFileShareName);                     
            CloudFileDirectory rootDir = fileShare.getRootDirectoryReference();
            CloudFileDirectory tempDir = rootDir.getDirectoryReference(TEMP_DIRECTORY_PATH);
            Iterable<ListFileItem>  fileIterable = tempDir.listFilesAndDirectories();
            
            Date now = new Date();

            for(ListFileItem tempFileItem : fileIterable) {
            	CloudFile tempFile = (CloudFile)tempFileItem;            	
            	
            	try {
  
            		Date lastModifiedDate = tempFile.getProperties().getLastModified();     
            		long timeDiff = (now.getTime() - lastModifiedDate.getTime())/ 3600000;
            		
            		if(timeDiff >= TIME_TO_LIVE_HOURS) {
            			tempFile.deleteIfExists();
            		}           	        	
            		
            	}catch(StorageException e) {
            	}           

            }
            
              
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }
}

 

하지만 파일의 LastModifiedTime을 가지고와야 하는데

tempFile의 properties가 모두 null 또는 기본값으로 표시되었다.

CloudFile의 downloadAttributes() 메서드를 사용함으로써 파일의 속성을 받아왔다.