我无法使用groovy脚本在couchbase上创建主索引。以下是我使用的代码行: -
@Grab('com.couchbase.client:java-client:2.2.6')
import java.util.concurrent.CountDownLatch;
import com.couchbase.client.java.Bucket;
import com.couchbase.client.java.Cluster;
import com.couchbase.client.java.CouchbaseCluster;
import com.couchbase.client.java.document.JsonDocument;
import com.couchbase.client.java.document.json.JsonObject;
import com.couchbase.client.java.CouchbaseCluster
import com.couchbase.client.java.query.N1qlQuery;
import com.couchbase.client.java.query.N1qlQueryResult;
import com.couchbase.client.java.query.N1qlQueryRow;
import com.couchbase.client.java.query.SimpleN1qlQuery;
import com.couchbase.client.java.env.CouchbaseEnvironment;
import com.couchbase.client.java.env.DefaultCouchbaseEnvironment;
CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder().connectTimeout(10000).build();
def cluster = CouchbaseCluster.create(env, IPADDRESS);
def bucket = cluster.openBucket(BUCKET_NAME, BUCKET_PASSWORD);
log.info "Connection done"
String queryString = "CREATE PRIMARY INDEX `PrimInd` ON BUCKET_NAME"
bucket.query(N1qlQuery.simple(queryString))
log.info "Primary index created"
它给出了如下错误: -
java.lang.RuntimeException: java.util.concurrent.TimeoutException at this line:-
bucket.query(N1qlQuery.simple(queryString))
连接正在正确完成,同样的查询在couchbase服务器中有效。所以,我认为我的代码存在问题。
你能帮帮我吗?
答案 0 :(得分:2)
在Couchbase Java客户端中,query()
方法委托给使用JavaRx的Blocking
API。阻止API的source代码声明:
如果
Observable
内发生错误,则会引发错误 作为Exception
。 如果超时启动,则会TimeoutException
嵌套在RuntimeException
中以完全兼容Observable.timeout(long, TimeUnit)
行为。
您遇到TimeoutException
嵌套RuntimeException
,因此根本原因是您的查询超时。
DefaultCouchbaseEnvironment
defaults到 queryTimeout (N1qlQuery查询的超时used)为75毫秒。您可以使用环境构建器更改此默认值:
def env = DefaultCouchbaseEnvironment.builder()
.connectTimeout(10000)
.queryTimeout(10000) // This is the query timeout
.build()