我有一个简单的spring项目,尝试使用spring-data-couchbase从couchbase中检索文档 . 我通过扩展AbstractCouchbaseConfiguration配置了配置 . 一切都很好 .
由于我使用couchbase作为缓存,现在我需要将操作超时设置为较低的值 . 任何人都可以了解如何做到这一点?
要为CouchbaseClient定义超时,必须使用ConnectionFactory提供它 . 遗憾的是,当前版本的spring-data-couchbase并没有提供一种简单的方法 .
负责创建连接工厂的类是ConnectionFactoryBean,它有一个用于操作超时的setter,但我找不到 @Configuration 类的任何内容 .
@Configuration
由于您要扩展AbstractCouchbaseConfiguration,您可能想要覆盖 couchbaseClient() :
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"/>
根据文档,正确答案是错误的 . 这不是它应该做的方式......
从 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(); }
还可以通过这种方式分配其他选项 .
2 回答
要为CouchbaseClient定义超时,必须使用ConnectionFactory提供它 . 遗憾的是,当前版本的spring-data-couchbase并没有提供一种简单的方法 .
负责创建连接工厂的类是ConnectionFactoryBean,它有一个用于操作超时的setter,但我找不到
@Configuration
类的任何内容 .由于您要扩展AbstractCouchbaseConfiguration,您可能想要覆盖
couchbaseClient()
:此外,您可以直接调用CouchbaseFactoryBean,但如果您没有使用XML bean定义配置应用程序,那么这不是一个好习惯 .
以下是XML配置:
根据文档,正确答案是错误的 . 这不是它应该做的方式......
从 AbstractCouchbaseConfiguration 延伸
例如,要自定义超时连接:
还可以通过这种方式分配其他选项 .