我有两个不同的tomcat7服务器,每个服务器都部署了相同的Web服务。每个Web服务请求都必须更新共享文件系统(通常是NAS)上的文件。 必须同步文件写入以避免在tomcat服务器的JVM内以及2个服务器的JVM之间发生冲突。 我尝试了几种方法:
=>用于文件写入的同步块仅在同一JVM中工作。
=> FileLock适用于每个JVM,但不适用于服务器的JVM(文件只能锁定一次)。
使用Java7 nio文件系统怎么样?这可以帮到我吗? 解决这个问题的最佳方法是什么?
PS:对不起,如果我的英语不好......
答案 0 :(得分:2)
我可以想到两种方法:
使用synchronized
(或Lock
)和FileLock
;即首先获取表示规范化绝对路径名的唯一对象的本地锁,然后获取FileLock
。
使用数据库;例如在数据库表中锁定一行,该表具有规范化的绝对路径名作为唯一键。
使用Java7 nio文件系统怎么样?这可以帮到我吗?
没有。问题是文件锁定是操作系统功能,并且行为(不是锁定同一进程中的其他线程)是基本的文件锁定语义......跨越一系列不同的操作系统。