首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用多个SpringBoot应用程序实例维护DB表中的唯一记录

如何使用多个SpringBoot应用程序实例维护DB表中的唯一记录
EN

Stack Overflow用户
提问于 2022-08-18 09:07:50
回答 1查看 170关注 0票数 1

我有一个调度程序,每4小时轮询一次数据,并根据一定的逻辑插入到表中。我还使用了@Transactional注释,而且每次都要检查表中是否已经存在数据。如果记录不存在,它将插入。当我是SpringBoot应用程序的多个实例时,每个实例都运行调度程序,并且一些数据并不都会被复制。这意味着我发现那个表包含重复的记录。我要插入的表是应用程序的现有表,很少有列没有被定义为唯一的约束。请建议我如何维护数据库表中的唯一记录,即使调度程序从多个实例运行。我使用的是PostgresqlSpringBoot

EN

回答 1

Stack Overflow用户

发布于 2022-08-18 09:32:59

因此,对问题的直接回答是对表中的每条记录都有唯一的标识符。来自外部API的唯一id将是一个完美的匹配。如果你没有-你可以手工计算。考虑一个例子:

代码语言:javascript
复制
@Entity @Table
public class Person {
    private String fieldOne;
    private String fieldTwo;
    @Column(unique=true)
    private String uniqueId;
    
    //in case you have to generate uniqueId manually
    public static Person fromExternalApi(String fieldOne, String fieldTwo) {
        Person person = new Person();
        person.fieldOne = fieldOne;
        person.fieldTwo = fieldTwo;
        person.uniqueId = fieldOne + fieldTwo;
    }
}

然后,您将基于uniqueId字段在DB端拥有唯一的索引,而DB将防止重复。

重要的是-你不能用

代码语言:javascript
复制
@GeneratedValue(strategy = GenerationType.IDENTITY)

因为每次将对象保存到DB时,它都会生成新的id。在这种情况下,可以从不同的实例多次保存相同的对象。

,但在您的例子中,我会提出另一种解决方案,的想法是只运行一次预定任务。here已经回答了这个问题

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73400303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档