2

ich verwende spring-data-couchbase 2.1.2 mit spring-boot 1.4.0.RC1 und couchbase-spring-cacheFeder-data-Couchbase wirft DocumentDoesNotExistException für nicht vorhandene Dokumente

Es funktioniert gut, wenn Caching deaktiviert wird, wenn es NULL-Objekt zurückgibt Wenn caching und versuchen, eine nicht zu finden vorhandenes Dokument im Bucket löst es eine Ausnahme aus:

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 

Liegt es an AsyncBucket? Ist es möglich, AsyncBucket zu deaktivieren?

Quellcode https://github.com/maverickmicky/spring-couchbase-cache

+0

könnten Sie einen Code teilen? Sind Sie sicher, dass es beim Laden des Dokuments passiert (dh auch wenn nur mit dem einfachen '@ Cacheable')? –

+0

Ich glaube nicht, dass es wegen 'AsyncBucket' ist, und es kann nicht deaktiviert werden, da es die Grundlage für das Couchbase SDK –

+0

Quellcode ist, muss couchbase lokal mit dem Bucket-Namen 'player' – mickygo

Antwort

4

Dieses Problem ist in der Tat ... Sobald ein Räumungsversuch für einen Schlüssel, der nicht im Cache gemacht wird, wird die Ausnahme ausgelöst werden :(

I‘ ve erstellt an issue dies für (mit Workarounds)

bearbeiten. um das Problem zu umgehen, sollten Sie in der Lage sein, ein CacheErrorHandler zu erklären, dass eine handleCacheEvictError Methode verfügt, die einfach DocumentDoesNotExistException fängt die Dokumentation Siehe Abschnitt auf den Cache zu konfigurieren. Abstraktion here und die CachingConfigurer javadoc.

+0

in Spring Boot ausgeführt werden 1.4, vieles, was Sie mit Ihrer 'Database' Klasse gemacht haben, ist redundant und kann automatisch konfiguriert werden. Stattdessen benötigen Sie nur die richtigen Einträge in 'application.property' und eine '@ Configuration' '@ EnableCaching' Klasse, die' CachingConfigurerSupport' erweitert und die' CacheErrorHandler'-Implementierung bereitstellt. –

+0

Ok. Aber das Problem, dem ich gegenüberstehe, ist während des Holens. Wenn ich 'findOne' für das Dokument aufrufe, das nicht existiert, wird die Ausnahme ausgelöst. Beliebige Probe für die Autokonfiguration? – mickygo

+0

Ich sah, dass Sie in Git commits. Ich werde den Cache-Handler versuchen. Ist es möglich, diese Eigenschaften von Umgebungsvariablen zu bekommen? Ich stelle dies in Docker und couchbase Params sind durch entrypoint.sh konfiguriert – mickygo

0

Ich bin für die gleiche Ausnahme und verwende Fall mir die Ressource am Cachen, die null zurück, zum Beispiel:

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

Und es fest mit dem unless Attribute @Cacheable der ab Frühling verfügbar 3.2 wie folgt:

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

hat einen Artikel auch geschrieben, das mein Problem beschreiben und beheben für die gleichen - Fixing com.couchbase.client.java.error.DocumentDoesNotExistException – Couchbase

Verwandte Themen