我正在编写一个 Java 应用程序来更新关系数据库(目前是 H2)。我有一个执行以下操作的过程:
- 查询特定数据项的外部系统
- 通过检查导入日志表来检查这些项目是否已经导入到我们的系统中。如果不:
- 将新数据项导入到各种表中。
- 将新记录写入导入日志表。
这个过程可能在不同的线程中同时运行。我想避免两个线程可能都检查导入日志,在那里找不到任何东西,然后都尝试插入数据项的问题。
什么可能是一个好方法?我一直在考虑:
- 使用 SERIALIZABLE 事务隔离。
- 依靠导入日志中的唯一索引约束来出错并回滚其中一个事务。
- 将进程限制为 Java 应用程序中的单个线程。
出于各种原因,以上所有方法似乎都不是很吸引人——还有另一种可能效果更好的方法吗?