首页 文章

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

提问于
浏览
1

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

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

2 回答

  • 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"/>
    
  • 3

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

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

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

相关问题