如何在Spring Data Couchbase中设置Couchbase操作超时?

Ari*_*nto 4 couchbase spring-data spring-data-couchbase

我有一个简单的spring项目,尝试使用spring-data-couchbase从ouchbase检索文档。我已经通过扩展AbstractCouchbaseConfiguration配置了配置。一切正常。

由于我将沙发床用作缓存,因此现在需要将操作超时设置为较低的值。任何人都可以阐明该怎么做?

Car*_*res 5

根据文档,正确答案是错误的。那不是应该做的方式...

当您从AbstractCouchbaseConfiguration扩展时

可以通过DefaultCouchbaseEnvironment.Builder或系统属性设置来自定义默认设置。后者始终优先,并且在运行时也可以用来覆盖构建器设置。http://docs.couchbase.com/sdk-api/couchbase-java-client-2.0.0/com/couchbase/client/java/env/DefaultCouchbaseEnvironment.html

例如,要自定义超时连接:

@Override
protected CouchbaseEnvironment getEnvironment() {
        DefaultCouchbaseEnvironment.builder().connectTimeout(15000);
        return super.getEnvironment();
}
Run Code Online (Sandbox Code Playgroud)

可以通过这种方式分配其他选项。


Car*_*cha 1

要定义 CouchbaseClient 的超时,您必须使用 ConnectionFactory 提供它。遗憾的是,当前版本的 spring-data-couchbase 并没有提供一种简单的方法来做到这一点。

负责创建连接工厂的类是ConnectionFactoryBean,它有一个用于操作超时的设置器,但我找不到@Configuration类的任何内容。

由于您正在扩展 AbstractCouchbaseConfiguration,因此您可能需要覆盖couchbaseClient()

public class MyCouchbaseConfiguration extends AbstractCouchbaseConfiguration {

     ...

     private final CouchbaseConnectionFactoryBuilder builder = new CouchbaseConnectionFactoryBuilder();
     private CouchbaseConnectionFactory connectionFactory;

     ...

     @Override
     @Bean(destroyMethod = "shutdown")
     public CouchbaseClient couchbaseClient() throws Exception {
           setLoggerProperty(couchbaseLogger());

           if(connectionFactory == null){
               builder.setOpTimeout(myTimeout);
               // Set another parameters.
               ...

               connectionFactory = builder.buildCouchbaseConnection(
                   bootstrapUris(bootstrapHosts()),
                   getBucketName(),
                   getBucketPassword()
               );
           }

           return new CouchbaseClient(connectionFactory);
     }
}
Run Code Online (Sandbox Code Playgroud)

另外,您可以直接调用 CouchbaseFactoryBean,但如果您不使用 XML bean 定义配置应用程序,那么这不是一个好习惯。

以下是 XML 配置以防万一:

<bean id="couchbase" class="org.springframework.data.couchbase.core.CouchbaseFactoryBean">
    <property name="opTimeout" value="1000"/> <!-- 1 sec -->
    <property name="bucket" value="myBucket"/>
    <property name="password" value="myPassword"/>
    <property name="host" value="myHost"/>
</bean>
<couchbase:template id="couchbaseTemplate"/>
Run Code Online (Sandbox Code Playgroud)