2016-07-26 84 views
2

我使用spring-data-couchbase 2.1.2spring-boot 1.4.0.RC1couchbase-spring-cache弹簧数据couchbase抛出DocumentDoesNotExistException不存在的文件

它正常工作时,缓存被禁用,因为它当启用缓存,并试图找到一个非返回NULL对象现有的文档在桶中引发异常:

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

+0

你能分享一些代码吗?你确定在加载文档时会发生这种情况(即使只使用简单的'@ Cacheable'也会发生这种情况)? –

+0

我不认为这是因为'AsyncBucket',它不能被禁用,因为它是Couchbase SDK –

+0

添加源代码的基础,您需要在Spring Boot中使用bucket名称'player' – mickygo

回答

4

这确实是......只要一键驱逐尝试,是不是在缓存制成,异常会被抛出一个问题:(

我已经为此创建an issue(与变通)

编辑:要解决这个问题,你应该能够申报CacheErrorHandler具有handleCacheEvictError方法,简单地捕捉DocumentDoesNotExistException 查看文档部分上配置缓存。抽象hereCachingConfigurer javadoc

+0

在本地运行couchbase 1.4,你用'Database'类做的很多事情都是多余的,可以自动配置。相反,您只需在'application.property' +'@ Configuration'' @ EnableCaching'类的适当条目中扩展'CachingConfigurerSupport'并提供'CacheErrorHandler'实现。 –

+0

好的。但我面临的问题是在取材期间。当我在不存在的文档上调用'findOne'时,它会抛出异常。 任何自动配置示例? – mickygo

+0

我看到你在git中的提交。我会尝试缓存处理程序。 是否可以从环境变量中获取这些属性?我在docker中部署了这个参数,通过entrypoint.sh – mickygo

0

我在同样的异常和使用案​​例是我在缓存其中返回null,例如资源:

@Override 
@Cacheable(value = "EMPLOYEE_", key = "#id") 
public Employee getEmployee(int id) { 
    return null; 
} 

并采用unless属性的@Cacheable其可作为春3.2的固定它,如下:

@Override 
@Cacheable(value = "EMPLOYEE_", key = "#id", unless = "#result == null") 
public Employee getEmployee(int id) { 
    return null; 
} 

曾经写过一篇文章,以及其描述我的问题,并解决了相同的 - Fixing com.couchbase.client.java.error.DocumentDoesNotExistException – Couchbase