如何在 spring 数据 couchbase 中设置 couchbase 操作超时?
How to set couchbase operation timeout in spring data couchbase?
我有一个简单的 spring 项目,它尝试使用 spring-data-couchbase 从 couchbase 检索文档。我通过扩展 AbstractCouchbaseConfiguration 配置了配置。一切正常。
由于我使用couchbase作为缓存,现在我需要将操作超时设置为一个较低的值。任何人都可以阐明如何做到这一点?
要为 CouchbaseClient 定义超时,您必须使用 ConnectionFactory 提供它。遗憾的是,当前版本的 spring-data-couchbase 没有提供简单的方法来做到这一点。
负责创建连接工厂的 class 是 ConnectionFactoryBean,它有一个 setter 的操作超时,但我找不到 @Configuration
的任何东西classes.
由于您正在扩展 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"/>
根据文档,正确答案是错误的。这不是应该的方式...
当您从 AbstractCouchbaseConfiguration
扩展时
Default settings can be customized through the DefaultCouchbaseEnvironment.Builder or through the setting of system properties. Latter ones take always precedence and can be used to override builder settings at runtime too. 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();
}
可以通过这种方式分配其他选项。
对于 Spring Data Couchbase 2,在 application.properties 中添加以下 属性 就可以了
spring.couchbase.env.timeouts.connect=20000
根据文档 (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.
我用queryTimeout
设置了操作超时值如下图:
CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder()
.connectTimeout(50000).socketConnectTimeout(50000)
.queryTimeout(1000)
.build();
这将确保您在 1 秒内得到响应。
使用此 link 获取不同的可用选项:
https://docs.couchbase.com/java-sdk/2.7/client-settings.html#timeout-options
我有一个简单的 spring 项目,它尝试使用 spring-data-couchbase 从 couchbase 检索文档。我通过扩展 AbstractCouchbaseConfiguration 配置了配置。一切正常。
由于我使用couchbase作为缓存,现在我需要将操作超时设置为一个较低的值。任何人都可以阐明如何做到这一点?
要为 CouchbaseClient 定义超时,您必须使用 ConnectionFactory 提供它。遗憾的是,当前版本的 spring-data-couchbase 没有提供简单的方法来做到这一点。
负责创建连接工厂的 class 是 ConnectionFactoryBean,它有一个 setter 的操作超时,但我找不到 @Configuration
的任何东西classes.
由于您正在扩展 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"/>
根据文档,正确答案是错误的。这不是应该的方式...
当您从 AbstractCouchbaseConfiguration
扩展时Default settings can be customized through the DefaultCouchbaseEnvironment.Builder or through the setting of system properties. Latter ones take always precedence and can be used to override builder settings at runtime too. 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();
}
可以通过这种方式分配其他选项。
对于 Spring Data Couchbase 2,在 application.properties 中添加以下 属性 就可以了
spring.couchbase.env.timeouts.connect=20000
根据文档 (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.
我用queryTimeout
设置了操作超时值如下图:
CouchbaseEnvironment env = DefaultCouchbaseEnvironment.builder()
.connectTimeout(50000).socketConnectTimeout(50000)
.queryTimeout(1000)
.build();
这将确保您在 1 秒内得到响应。
使用此 link 获取不同的可用选项: https://docs.couchbase.com/java-sdk/2.7/client-settings.html#timeout-options