我想從數據庫中同步硬盤上的文件。試圖在java中同步文件寫入系統
我在做什麼檢查文件是否存在,如果不是我從數據庫中獲取文件並部署它。由於競爭條件,我不想多次寫入文件。
這裏是我做的代碼:
IMPORTENT:此代碼是一個Bean裏面有所有的含義
@Override public String getThumbnailPictureUrl(Design design) { String relativePath = String.format(THUMBNAIL_URL, design.getId(), design.getThumbnailPicture().getFileName()); String realPath = servletContext.getRealPath("/"+relativePath); logger.info("Request Thumbnail picture for design: " + design.getId()); logger.info("Thumbnail picture relative path: " + relativePath); logger.info("Thumbnail picture real path: " + realPath); File file = new File(realPath); if(!file.exists()) { synchronized (thumbnailLock) { if(!file.exists()) { logger.warn("Could not fild file in path: " + realPath); FileAttachment pictureAttachment = design.getThumbnailPicture(); Hibernate.initialize(pictureAttachment.getAttachment()); Data data = (Data) pictureAttachment.getAttachment(); file = toolBox.convertBlobToFile(data.getBlob(), file); logger.warn("file created in path: " + realPath); } } } return relativePath; }
有了這個解決方案的情況下,我沒有找到該文件我真的不會寫文件2倍,以及任何其他文件,因爲我正在同步整個塊的所有線程試圖達到它,即使是寫一個不同的文件。
有什麼建議嗎?
謝謝。
什麼版本的Java? – erickson