首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring-data-couchbase为不存在的文档抛出DocumentDoesNotExistException

spring-data-couchbase为不存在的文档抛出DocumentDoesNotExistException
EN

Stack Overflow用户
提问于 2016-07-26 12:21:20
回答 2查看 1.5K关注 0票数 3

我将spring-data-couchbase 2.1.2spring-boot 1.4.0.RC1couchbase-spring-cache结合使用

当缓存被禁用时,它工作得很好,因为它在启用缓存时返回空对象,并试图在桶中找到一个不存在的文档,然后抛出一个异常:

代码语言:javascript
复制
com.couchbase.client.java.error.DocumentDoesNotExistException: null
    at com.couchbase.client.java.CouchbaseAsyncBucket$22.call(CouchbaseAsyncBucket.java:684) ~[java-client-2.2.8.jar:na]
    at com.couchbase.client.java.CouchbaseAsyncBucket$22.call(CouchbaseAsyncBucket.java:671) ~[java-client-2.2.8.jar:na]
    at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:54) ~[rxjava-1.0.17.jar:1.0.17]
    at rx.observers.Subscribers$5.onNext(Subscribers.java:234) ~[rxjava-1.0.17.jar:1.0.17]
    at rx.subjects.SubjectSubscriptionManager$SubjectObserver.onNext(SubjectSubscriptionManager.java:223) ~[rxjava-1.0.17.jar:1.0.17]
    at rx.subjects.AsyncSubject.onCompleted(AsyncSubject.java:101) ~[rxjava-1.0.17.jar:1.0.17]
    at com.couchbase.client.core.endpoint.AbstractGenericHandler.completeResponse(AbstractGenericHandler.java:354) ~[core-io-1.2.9.jar:na]
    at com.couchbase.client.core.endpoint.AbstractGenericHandler.access$000(AbstractGenericHandler.java:72) ~[core-io-1.2.9.jar:na]
    at com.couchbase.client.core.endpoint.AbstractGenericHandler$1.call(AbstractGenericHandler.java:372) ~[core-io-1.2.9.jar:na]
    at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) ~[rxjava-1.0.17.jar:1.0.17]
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) ~[na:1.7.0_80]
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) ~[na:1.7.0_80]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178) ~[na:1.7.0_80]
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292) ~[na:1.7.0_80]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) ~[na:1.7.0_80]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) ~[na:1.7.0_80]
    at java.lang.Thread.run(Thread.java:745) ~[na:1.7.0_80]
Caused by: rx.exceptions.OnErrorThrowable$OnNextValue: OnError while emitting onNext value: com.couchbase.client.core.message.kv.RemoveResponse.class
    at rx.exceptions.OnErrorThrowable.addValueAsLastCause(OnErrorThrowable.java:109) ~[rxjava-1.0.17.jar:1.0.17]
    at rx.exceptions.Exceptions.throwOrReport(Exceptions.java:188) ~[rxjava-1.0.17.jar:1.0.17]
    at rx.internal.operators.OperatorMap$1.onNext(OperatorMap.java:56) ~[rxjava-1.0.17.jar:1.0.17]
    ... 14 common frames omitted

是因为AsyncBucket吗?可以禁用AsyncBucket吗?

源代码https://github.com/maverickmicky/spring-couchbase-cache

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-27 12:32:28

这确实是个问题..。一旦对缓存中没有的键进行逐出尝试,异常将被抛出:

我已经为此创建了问题 (带工作环境)。

编辑:要解决这个问题,您应该能够声明一个CacheErrorHandler,该handleCacheEvictError方法只捕获DocumentDoesNotExistException。请参阅关于配置缓存抽象这里javadoc的文档部分。

票数 5
EN

Stack Overflow用户

发布于 2017-01-30 19:24:50

我遇到相同的异常,用例是我正在缓存返回null的资源,例如:

代码语言:javascript
复制
@Override
@Cacheable(value = "EMPLOYEE_", key = "#id")
public Employee getEmployee(int id) {
    return null;
}

并使用unless属性@Cacheable对其进行了修正,该属性可在Spring3.2中使用,如下所示:

代码语言:javascript
复制
@Override
@Cacheable(value = "EMPLOYEE_", key = "#id", unless = "#result == null")
public Employee getEmployee(int id) {
    return null;
}

还写了一篇文章,描述了我的问题并修复了相同的- 固定com.couchbase.client.java.error.DocumentDoesNotExistException -耦合基

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38589780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档