我正在尝试将我的应用程序从 spring boot 2.2.6 迁移到 2.3.6。此更新还将 spring-data-couchbase 3.2.6 更新为 4.0.2。早期版本会抛出 OptimisticLockingFailureException,但这次升级不会抛出异常。我正在使用调试器在持久化之前停止执行,然后在 couchbase UI 中手动更改数据并继续执行。spring-data-couchbase 3.2.6 中抛出异常,但 4.0.2 中没有
弹簧数据沙发底座 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();
}
弹簧数据沙发底座 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
注释