Javers 从不同实例保存相同的通用提交对象
在我的应用程序中,我使用的是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。而不是真的 由于上述问题,若请求转到不同的新实例或实例重新启动,则会创建新版本 你能告诉我我们如何处理这个问题吗 我将从项目中提取代码,并创建一个示例运行项目和共享。 现在,我可以分享一些课程,请看,如果这些有帮助:Javers 从不同实例保存相同的通用提交对象,javers,Javers,在我的应用程序中,我使用的是Javers版本5.1.2和jdk 11,在这里我提交通用对象T并保存到mongodb中。通用提交对象实际上是从通用rest服务创建的,用户可以在其中传递任何Json。 每件事在一个实例上都进展顺利。无论何时使用相同的请求发送任何重新提交,Javers commit.getChanges().isEmpty()方法都会返回true 问题: 1) 每当相同的请求发送到不同的实例时,commit.getChanges().isEmpty()方法返回false。 2) 如果
//---------------------实体类别:
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
- 若相同的第二个请求转到不同的实例,则在负载平衡器下,它将其作为不同的请求,并
返回false。预期响应应该为true,因为它是同一版本commit.getChanges().isEmpty()
- 如果在第一个请求之后,我重新启动实例并发出相同的请求,它将返回false,而不是true,这意味着,
方法将相同的请求视为相同的getChanges