5

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

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

4

5 回答 5

6

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

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

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

于 2016-12-02T04:22:19.387 回答
4

根据文档(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.
于 2019-06-12T14:56:24.710 回答
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);
     }
}

此外,您可以直接调用 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"/>
于 2015-07-14T16:52:11.090 回答
1

对于 Spring Data Couchbase 2,在 application.properties 添加以下属性就可以了

 spring.couchbase.env.timeouts.connect=20000
于 2019-04-12T06:34:45.637 回答
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

于 2019-10-01T11:03:06.467 回答