Javers 从不同实例保存相同的通用提交对象

Javers 从不同实例保存相同的通用提交对象,javers,Javers,在我的应用程序中,我使用的是Javers版本5.1.2和jdk 11,在这里我提交通用对象T并保存到mongodb中。通用提交对象实际上是从通用rest服务创建的,用户可以在其中传递任何Json。 每件事在一个实例上都进展顺利。无论何时使用相同的请求发送任何重新提交,Javers commit.getChanges().isEmpty()方法都会返回true 问题: 1) 每当相同的请求发送到不同的实例时,commit.getChanges().isEmpty()方法返回false。 2) 如果

在我的应用程序中,我使用的是Javers版本5.1.2和jdk 11,在这里我提交通用对象T并保存到mongodb中。通用提交对象实际上是从通用rest服务创建的,用户可以在其中传递任何Json。 每件事在一个实例上都进展顺利。无论何时使用相同的请求发送任何重新提交,Javers commit.getChanges().isEmpty()方法都会返回true

问题: 1) 每当相同的请求发送到不同的实例时,commit.getChanges().isEmpty()方法返回false。 2) 如果我提交一个请求,然后重新启动实例,然后再次提交,commit.getChanges().isEmpty()再次返回false。而不是真的

由于上述问题,若请求转到不同的新实例或实例重新启动,则会创建新版本

你能告诉我我们如何处理这个问题吗

我将从项目中提取代码,并创建一个示例运行项目和共享。 现在,我可以分享一些课程,请看,如果这些有帮助:


//---------------------实体类别:

import java.util.Map;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;

@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ClientEntity<T> {

    @Getter
    @Setter
    private String entityId;

    @Getter
    @Setter
    private T commitObj;

    @Getter
    @Setter
    private String authorName;

    @Getter
    @Setter
    private boolean major;

    @Getter
    @Setter
    private Map<String, String> commitProperties;


}
import java.util.Map;
导入lombok.allargsconstuctor;
进口龙目吸气剂;
导入lombok.noargsconstuctor;
进口龙目织机;
进口龙目草;
@AllArgsConstructor
@诺尔格构装师
@托斯特林
公共类客户{
@吸气剂
@塞特
私有字符串entityId;
@吸气剂
@塞特
私人信托委员会;
@吸气剂
@塞特
私有字符串authorName;
@吸气剂
@塞特
私立布尔专业;
@吸气剂
@塞特
私有地图委员会财产;
}
//--------数据积分器

@Service
public class DataIntegrator {

    private final Javers javers;

    private IVersionRepository versionDao;

    private IdGenerator idGenerator;

    @Inject
    public DataIntegrator(Javers javers, IVersionRepository versionDao, IdGenerator idGenerator) {
        this.javers = javers;
        this.versionDao = versionDao;
        this.idGenerator = idGenerator;
    }

    public <T> String commit(ClientEntity<T> clientObject) {
        CommitEntity commitEntity = new CommitEntity();
        commitEntity.setEntityId(clientObject.getEntityId());
        commitEntity.setEntityObject(clientObject.getCommitObj());

        Map<String, String> commitProperties = new HashMap<>();
        commitProperties.putAll(clientObject.getCommitProperties());
        commitProperties.put(commit_id_property_key, clientObject.getEntityId());
        commitProperties.putAll(idGenerator.getEntityVersions(clientObject.getEntityId(), clientObject.isMajor()));

        Commit commit = javers.commit(clientObject.getAuthorName(), commitEntity, commitProperties);

        if (commit.getChanges().isEmpty()) {
            return "No Changes Found";
        }
        versionDao.save(
                new VersionHead(clientObject.getEntityId(), Long.parseLong(commitProperties.get(major_version_id_key)),
                        Long.parseLong(commitProperties.get(minor_version_id_key))));

        return commit.getProperties().get(major_version_id_key) + ":"
                + commit.getProperties().get(minor_version_id_key);
    }
}
@服务
公共类数据集成器{
私人决赛;
私立大学;
专用IdGenerator IdGenerator;
@注入
公共数据集成商(Javers Javers,版本DAO,IdGenerator IdGenerator){
这个.javers=javers;
this.versionDao=versionDao;
this.idGenerator=idGenerator;
}
公共字符串提交(ClientEntity clientObject){
承诺承诺=新承诺();
setEntityId(clientObject.getEntityId());
setEntityObject(clientObject.getCommitObj());
Map commitProperties=newhashmap();
putAll(clientObject.getCommitProperties());
put(commit_id_property_key,clientObject.getEntityId());
putAll(idGenerator.getEntityVersions(clientObject.getEntityId(),clientObject.isMajor());
Commit-Commit=javers.Commit(clientObject.getAuthorName(),committentity,committeproperties);
if(commit.getChanges().isEmpty()){
返回“未发现任何更改”;
}
版本DAO.save(
新版本头(clientObject.getEntityId(),Long.parseLong(commitProperties.get(major\u version\u id\u key)),
parseLong(commitProperties.get(minor_version_id_key));
返回commit.getProperties()
+commit.getProperties().get(次要版本id密钥);
}
}

1)
commitObj
是一个通用对象,在ClientEntity中,它保存来自Rest Web服务的Json。JSON可以是任何有效的JSON。也可以具有嵌套结构。 2) 调用
javers.commit
方法后,我们将使用
commit.getChanges().isEmpty()
检查它是否是现有实体或是否有任何更改

  • 若同一个第二个请求到达同一个实例,那个么正如预期的那个样,对于更改,它将返回true
  • 若相同的第二个请求转到不同的实例,则在负载平衡器下,它将其作为不同的请求,并
    commit.getChanges().isEmpty()
    返回false。预期响应应该为true,因为它是同一版本
  • 如果在第一个请求之后,我重新启动实例并发出相同的请求,它将返回false,而不是true,这意味着,
    getChanges
    方法将相同的请求视为相同的

您是否有重现您在此处描述的问题的工作代码示例?这将帮助社区更好地回答你的问题。嗨,克里斯汀,我添加了一些有用的课程。请看看这些是否有帮助。