Spring Data Couchbase不会引发OptimisticLockingFailureException

问题描述

我正在尝试将应用程序从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 (将#修改为@)