我正在设置一个带有@Id注释的文档,在我的测试中我得到了一个,MappingException因为在创建新文档时没有设置 Id。spring-data + couchbase 无法自动为新文档分配ID?
我有一个简单的spring项目,尝试使用spring-data-couchbase从ouchbase检索文档。我已经通过扩展AbstractCouchbaseConfiguration配置了配置。一切正常。
由于我将沙发床用作缓存,因此现在需要将操作超时设置为较低的值。任何人都可以阐明该怎么做?
如何使用 spring-data-couchbase 为特定的 couchbase 文档设置 TTL(生存时间)?我知道有一种方法可以使用 Document 表示法设置到期时间,如下所示 @Document(expiry = 10)
http://docs.spring.io/spring-data/couchbase/docs/1.1.1.RELEASE/reference/html/couchbase.entity.html
它将为通过 Entity 类保存的所有文档设置 TTL。
但似乎有办法为特定文档设置过期(TTL)时间“获取并触摸:获取指定文档并更新文档过期时间”。在http://docs.couchbase.com/developer/dev-guide-3.0/read-write.html 中提到
如何通过 spring-data-couchbase 实现上述功能即使我可以使用 Java SDK 实现该功能,也可以。
任何帮助......
有没有一种简单的方法可以将spring数据更新到没有_class属性的文档中?在沙发上,我的sampledata水桶里有这样的东西:
{
"username" : "alice",
"created" : 1473292800000,
"data" : { "a": 1, "b" : "2"},
"type" : "mydata"
}
Run Code Online (Sandbox Code Playgroud)
现在,是否有任何方法可以定义从此文档结构到Java对象的映射(请注意,_class缺少属性并且无法添加属性),反之亦然,这样我就可以从Spring Couchbase数据中获取所有(或大多数)自动魔术功能?
诸如此类:如果type字段的值为“ mydata”,请使用类MyData.java。因此,当执行查找而不是自动添加AND _class = "mydata"到生成的查询add时AND type = "mydata"。
我使用spring-data-couchbase 2.1.2与spring-boot 1.4.0.RC1和couchbase-spring-cache
当缓存被禁用时它工作正常,因为它返回 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 …Run Code Online (Sandbox Code Playgroud) 在我们的spring-boot 2.0.4.RELEASE应用程序中,我们使用Couchbase version 5.5.1 build 3511with Spring。
我们在 Repository 接口中添加了一个新的删除方法:
public interface CatRepository extends CouchbaseRepository<Cat, String> {
long deleteAllByName(String name);
Run Code Online (Sandbox Code Playgroud)
调用该方法时,文档从存储桶中删除,但我们收到以下错误:
返回原始类型的查询预计将返回 1 个结果,得到 X
该X 值根据删除的项目数而变化。在下面的示例中,删除了 27 个项目。
这是完整的堆栈跟踪:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Query returning a primitive type are expected to return exactly 1 result, got 27] with root cause
org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Query returning a primitive type are expected to …Run Code Online (Sandbox Code Playgroud) 嗨,我是Couchbase的新手,并使用Couchbase 6.0创建了一个Springboot应用程序.
当我安装Couchbase时,它要求我创建用户名和密码,然后我设置username ="admin"和password ="password"然后我创建了"student"存储桶.
我在application.properties文件中完成了所有必需的配置.
spring.couchbase.bootstrap-hosts=127.0.0.1
spring.couchbase.bucket.name=student
spring.couchbase.bucket.password=password
Run Code Online (Sandbox Code Playgroud)
在服务器启动时,我收到以下错误
Caused by: com.couchbase.client.java.error.InvalidPasswordException: null
Run Code Online (Sandbox Code Playgroud)
Couchbase Web控制台,我添加了一个安全选项卡,用户名"admin"(我在Couchbase服务器安装期间创建),并给予完全管理员访问权限

在服务器重新启动时,我遇到了同样的问题
然后我在那里添加了一个用户"学生"(与我的桶名相同)并给予完全管理员访问权限
这次我的服务器成功启动,我没有得到任何异常
所以我在这里有两个问题,
1:我是否需要在安全选项卡中的Couchbase服务器中创建与用户名一样多的用户名?
2:假设我只想使用用户名"admin"(我在Couchbase服务器安装期间创建),我将如何实现这一目标?
有人可以对这种行为有所了解吗?
当我SELECT * FROM projects ORDER BY createdAt desc在 Couchbase Web UI 中运行此查询时,结果按原样排序,但不是在 Java 中。
Java代码
@Override
public List<Project> getAllProjects(String requestedOrder, Integer page, Integer pageOffset) {
String statement = "SELECT projects.* FROM projects ORDER BY $requestedOrder DESC OFFSET $offset LIMIT $pageOffset";
QueryOptions queryOptions = queryOptions().parameters(
JsonObject.create().put("offset", (page - 1) * pageOffset)
.put("pageOffset", pageOffset)
.put("requestedOrder", requestedOrder));
QueryResult queryResult = couchbaseCluster.query(statement, queryOptions);
return queryResult.rowsAs(Project.class);
}
Run Code Online (Sandbox Code Playgroud)
网页界面结果
[
{
"projects": {
"createdAt": 1603804921950,
"name": "Third Project",
...
}
},
{
"projects": { …Run Code Online (Sandbox Code Playgroud) 我正在使用 Spring data couchbase 。
package com.CouchbaseMine.config;
import java.io.IOException;
import java.net.URI;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration;
import com.couchbase.client.CouchbaseClient;
@Configuration
@EnableAutoConfiguration
public class CouchbaseMineCouchBaseConfig extends AbstractCouchbaseConfiguration {
@Value("${couchbase.cluster.bucket}")
private String bucketName;
@Value("${couchbase.cluster.password}")
private String password;
@Value("${couchbase.cluster.ip}")
private String ip;
@Override
protected String getBucketName() {
List<URI> uris=new LinkedList<URI>();
uris.add(URI.create("5x.xx.xxx.xx9"));
CouchbaseClient client=null;
try {
System.err.println("-- > - > i am in ");
client=new CouchbaseClient(uris,"default","");
} catch (IOException e) {
System.err.println("IOException …Run Code Online (Sandbox Code Playgroud) 我在存储桶学生记录中有一个文档“学生”,其中记录了 id。
{
"id":"101",
"fname": "abc",
"lname": "xyz",
"rank": "1",
"scholarShip": "",
"grade": ""
}
Run Code Online (Sandbox Code Playgroud)
我的工作是找到所有排名为 1 的学生,然后在相应的文档中更新“奖学金”和“成绩”。
我在 Couchbase 中创建了一个事件函数,如下所示
function OnUpdate(doc, meta) {
log('docId', meta.id);
try {
var rankValue = SELECT rank FROM `student-records` USE KEYS ["id"];
for (var rv of rankValue) {
if (rv==1) {
UPDATE `student-records` USE KEYS ["id"] set scholarShip="100%", grade="A";
}
}
} catch(e) { log(e); }
}
Run Code Online (Sandbox Code Playgroud)
在部署这个时,我收到一个错误:
部署失败:语法错误 (7, 16) - 无法在存储桶“student-records”上执行 DML 查询
在创建函数时,我已经声明:
源存储桶 => 学生记录
元数据桶=>学生记录元数据