我正面临一个问题,我没有一个干净的解决方案。我正在编写Java应用程序,应用程序将某些数据存储在一组有限的文件中。我们没有使用任何数据库,只是普通文件。由于某些用户触发的操作,需要更改某些文件。我需要这是一个全有或全无的操作。也就是说,要么更新所有文件,要么不更新任何文件。如果例如5个文件中的2个被更改,而其他3个不是由于某些IOException,则是灾难性的。
实现这一目标的最佳策略是什么? 是否嵌入内存数据库(例如hsqldb)是获得这种原子性/事务行为的一个很好的理由?
非常感谢!
答案 0 :(得分:5)
安全的方法IMO是:
这取决于它的重量和时间等限制。
答案 1 :(得分:2)
实现这一目标的最佳策略是什么?是否嵌入内存数据库(例如hsqldb)是获得这种原子性/事务行为的一个很好的理由?
是。如果您想要交易行为,请使用经过充分测试的系统,该系统的设计考虑到了这一点,而不是试图在不可靠的基板上滚动自己的系统。
通常,文件系统不支持涉及多个文件的事务。
非Windows文件系统和NTFS往往具有可以替换原子文件的属性,因此如果您不能使用数据库并且
然后您可以执行以下操作:
答案 2 :(得分:1)
我已成功使用apache commons事务库进行原子文件操作。这允许您以事务方式修改文件,并可能在故障时回滚。
答案 3 :(得分:1)
我的方法是在你的java代码中使用一个锁。因此,每次只有一个进程可以写一些文件。我假设您的应用程序是唯一写入文件的应用程序。 如果即使如此,一些写入问题就会“回滚”你的文件,你需要保存一份文件副本,如上面的建议。
答案 4 :(得分:0)
您是否无法锁定所有文件,只有在锁定所有文件后才能写入文件?