0

我正在尝试将我的应用程序从 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注释

4

0 回答 0