Tôi đang cố gắng đồng bộ hóa một tệp tiền mặt trên đĩa cứng từ cơ sở dữ liệu.Cố gắng đồng bộ hóa một hệ thống ghi tệp bằng java
Tôi đang làm gì khi kiểm tra xem tệp có tồn tại không và nếu tôi không tìm nạp tệp từ cơ sở dữ liệu và triển khai tệp đó. Tôi không muốn viết tệp nhiều lần do điều kiện Race.
Đây là mã tôi đã làm:
importent: Mã này là bên trong một Bean với tất cả ý nghĩa của nó
@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; }
Với giải pháp này trong trường hợp tôi không tìm thấy các tập tin tôi thực sự sẽ không viết các tập tin 2 lần cũng như bất kỳ tập tin khác như tôi đang đồng bộ hóa toàn bộ khối cho tất cả các chủ đề cố gắng để đạt được nó ngay cả khi là để viết một tập tin khác nhau.
Mọi đề xuất?
Cảm ơn.
Phiên bản Java nào? – erickson