我有 2 个不同的 tomcat7 服务器,每个服务器上都部署了相同的 Web 服务。每个 Web 服务请求都必须更新共享文件系统(通常是 NAS)上的文件。 文件写入必须同步,以避免 Tomcat 服务器的 JVM 内部以及两台服务器的 JVM 之间发生冲突。 我尝试了几种方法:
=> 用于文件写入的同步块(synchronized block)只能在同一个 JVM 中工作。
=> FileLock 适用于每个 JVM,但不适用于服务器的 JVM(一个文件只能锁定一次)。
那么使用 Java7 nio 文件系统怎么样?这可以帮助我吗? 解决这个问题的最佳方法是什么?
PS:抱歉,如果我的英语不好......
最佳答案
我可以想到两种方法:
使用
synchronized
(或Lock
)以及FileLock
;即首先获取表示规范化绝对路径名的唯一对象的本地锁,然后获取FileLock
。使用数据库;例如锁定数据库表中的一行,该行将规范化绝对路径名作为唯一键。
And how about using the Java7 nio file system ? can this help me ?
没有。问题在于文件锁定是操作系统功能,而行为(不对同一进程中的其他线程进行锁定)是基本文件锁定语义......跨越一系列不同的操作系统。
关于java - 在 JVM 内部和跨 JVM 同步共享文件写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31318075/