アプリケーションを 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 ではスローされません
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 テンプレートにはそのようなメソッドがありません。OptimisicLockingFailureExpception をスローできるようにするために 4.0.2 で不足している構成はありますか? 私のエンティティオブジェクトには注釈が@Version long version;
あります@Document