我想从数据库中同步硬盘上的文件。试图在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