问题描述
我正在尝试将应用程序从Spring Boot 2.2.6迁移到2.3.6。该更新还将spring-data-couchbase 3.2.6更新为4.0.2。较早的版本引发OptimisticLockingFailureException,但此升级不会引发异常。我正在使用调试器在持久之前停止执行,然后在ouchbase UI中手动更改数据并继续执行。在spring-data-couchbase 3.2.6中引发异常,但在4.0.2中不会引发
spring-data-couchbase 3.2.6
CouchbaseConfiguration.java
@Configuration
@EnableCouchbaseRepositories
public class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {
@Value("${couchbase.cluster.bucketName}")
private String bucketName;
@Value("${couchbase.cluster.ip}")
private String ip;
@Value("${couchbase.cluster.password}")
private String password;
@Override
protected String getBucketName() {
return bucketName;
}
@Override
protected String getBucketPassword() {
return this.password;
}
@Override
protected List<String> getBootstrapHosts() {
return Arrays.asList(ip);
}
@Bean(name = BeanNames.COUCHBASE_TEMPLATE)
@Override
public CouchbaseTemplate couchbaseTemplate() throws Exception {
final CouchbaseTemplate template = super.couchbaseTemplate();
template.setWriteResultChecking(WriteResultChecking.EXCEPTION);
return template;
}
@Override
protected Consistency getDefaultConsistency() {
return Consistency.READ_YOUR_OWN_WRITES;
}
PersistenceSnippet.java
entity = repository.findById(id)
try {
return Optional.of(repository.save(entity)); // stop execution here in debugger
} catch (OptimisticLockingFailureException e) {
log.warn("Failed to persist optimistically");
return Optional.empty();
}
spring-data-couchbase 4.0.2
CouchbaseConfiguration.java
@Configuration
@EnableCouchbaseRepositories
public class CouchbaseConfiguration extends AbstractCouchbaseConfiguration {
@Value("${couchbase.cluster.bucketName}")
private String bucketName;
@Value("${couchbase.cluster.ip}")
private String ip;
@Value("${couchbase.cluster.password}")
private String password;
@Value("${couchbase.durability:lenient}")
private String durability;
@Override
public String getConnectionString() {
return ip;
}
@Override
public String getUserName() {
return bucketName;
}
@Override
public String getpassword() {
return password;
}
@Override
public String getBucketName() {
return bucketName;
}
是因为 template.setWriteResultChecking(WriteResultChecking.EXCEPTION); 的不同吗?但是4.0.2中的couchbase模板没有任何这样的方法。我在4.0.2中缺少任何配置以能够引发OptimisicLockingFailureExpception吗?我的实体对象具有@Version long version;
和@Document
批注
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)