我有一个调度器,它每4小时轮询一次数据,并根据一定的逻辑插入到表中。我还使用了@Transactional
注解,而且我每次都在检查数据是否已经存在于表中。如果记录不存在,它将插入。当我是SpringBoot应用程序的多个示例时,每个示例都运行调度程序,但有些数据并不是全部重复。2这意味着我发现表中包含重复记录。3我正在插入的表是应用程序中的现有表,并且有几列没有用唯一约束定义。请建议我如何维护数据库表中的唯一记录,即使调度程序从多个示例运行。我使用的是Postgresql和SpringBoot。
1条答案
按热度按时间x4shl7ld1#
因此,您问题的直接答案是为表中的每条记录设置唯一标识符。来自外部API的唯一标识符将是完全匹配的。如果您没有唯一标识符,则可以手动计算它。请考虑以下示例:
然后,您将在数据库端基于
uniqueId
字段创建唯一索引,并且数据库将防止重复。重要提示-您不能使用
因为每次您将对象保存到DB时,它都会生成新id在这种情况下,您可以从不同示例中多次保存同一对象
**但对于您的情况,我建议另一种解决方案。**方法是只运行一次计划任务。此问题已得到解答here