如何在spring数据库中设置couchbase操作超时?

时间:2015-07-09 19:22:59

标签: spring-data couchbase spring-data-couchbase

我有一个简单的spring项目,尝试使用spring-data-couchbase从couchbase中检索文档。我通过扩展AbstractCouchbaseConfiguration配置了配置。一切都很好。

由于我使用couchbase作为缓存,现在我需要将操作超时设置为较低的值。任何人都可以了解如何做到这一点?

5 个答案:

答案 0 :(得分:4)

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

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();
}

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

答案 1 :(得分:1)

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

负责创建连接工厂的类是ConnectionFactoryBean,它有一个用于操作超时的setter,但我找不到@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);
     }
}

此外,您可以直接调用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"/>

答案 2 :(得分:0)

对于Spring Data Couchbase 2,在application.properties中添加以下属性即可做到

 spring.couchbase.env.timeouts.connect=20000

答案 3 :(得分:0)

根据文档(https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html),

这是application.properties:

spring.couchbase.env.timeouts.connect=5000ms # Bucket connections timeouts.
spring.couchbase.env.timeouts.key-value=2500ms # Blocking operations performed on a specific key timeout.
spring.couchbase.env.timeouts.query=7500ms # N1QL query operations timeout.
spring.couchbase.env.timeouts.socket-connect=1000ms # Socket connect connections timeout.
spring.couchbase.env.timeouts.view=7500ms # Regular and geospatial view operations timeout.

答案 4 :(得分:0)

我使用queryTimeout来设置操作超时的值,如下所示:

CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder()
                    .connectTimeout(50000).socketConnectTimeout(50000)
                    .queryTimeout(1000)
                    .build();

这将确保您在1秒钟内得到响应。

使用此链接可获得不同的可用选项: https://docs.couchbase.com/java-sdk/2.7/client-settings.html#timeout-options