我有一个简单的 spring 项目,它尝试使用 spring-data-couchbase 从 couchbase 检索文档。我已经通过扩展 AbstractCouchbaseConfiguration 来配置配置。一切正常。
由于我使用 couchbase 作为缓存,现在我需要将操作超时设置为较低的值。任何人都可以阐明如何做到这一点?
我有一个简单的 spring 项目,它尝试使用 spring-data-couchbase 从 couchbase 检索文档。我已经通过扩展 AbstractCouchbaseConfiguration 来配置配置。一切正常。
由于我使用 couchbase 作为缓存,现在我需要将操作超时设置为较低的值。任何人都可以阐明如何做到这一点?
根据文档,正确答案是错误的。这不是它应该做的方式......
当您从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();
}
可以通过这种方式分配其他选项。
根据文档(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.
要为 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"/>
对于 Spring Data Couchbase 2,在 application.properties 添加以下属性就可以了
spring.couchbase.env.timeouts.connect=20000
我曾经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