Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring数据mongodb-设置查询超时_Mongodb_Spring Data Mongodb - Fatal编程技术网

Spring数据mongodb-设置查询超时

Spring数据mongodb-设置查询超时,mongodb,spring-data-mongodb,Mongodb,Spring Data Mongodb,在DBCursor中有一个使用maxTime()方法终止慢速查询的选项,我们在SpringDataMongoDB查询中是否有一个等效的方法 我必须在Spring data mongodb中终止特定的慢速查询 请提供您的建议 谢谢。有一个开放的票证支持cursor.maxTime(请参阅) 您可以使用自己的CursorPreparer添加所需的数据。你必须调整几个类 class MyQuery extends Query { long timeout; } class MyCursorP

在DBCursor中有一个使用maxTime()方法终止慢速查询的选项,我们在SpringDataMongoDB查询中是否有一个等效的方法

我必须在Spring data mongodb中终止特定的慢速查询

请提供您的建议


谢谢。

有一个开放的票证支持
cursor.maxTime
(请参阅)

您可以使用自己的
CursorPreparer
添加所需的数据。你必须调整几个类

class MyQuery extends Query {
    long timeout;
}

class MyCursorPreparer implements CursorPreparer {

    private final Query query;
    private final Class<?> type;

    public MyCursorPreparer(Query query, Class<?> type) {

        this.query = query;
        this.type = type;
    }

    @Override
    public DBCursor prepare(DBCursor cursor) {

        // add timeout options
        if (query instanceof MyQuery) {
            long timeout = ((MyQuery) query).timeout;
            if (timeout > 0) {
                cursor = cursor.maxTime(timeout, TimeUnit.SECONDS);
            }
        }

        // ... do other preparation stuff

        return cursor;
    }
}

class MyTemplate extends MongoTemplate {

    public MyTemplate(Mongo mongo, String databaseName) {
        super(mongo, databaseName);
    }

    @Override
    public <T> List<T> find(final Query query, Class<T> entityClass, String collectionName) {

        if (query == null) {
            return findAll(entityClass, collectionName);
        }

        return doFind(collectionName, query.getQueryObject(), 
          query.getFieldsObject(), entityClass, 
          new MyCursorPreparer(query, entityClass));
    }

    @Override
    public void executeQuery(Query query, String collectionName, DocumentCallbackHandler dch) {
        executeQuery(query, collectionName, dch, new MyCursorPreparer(query, null));
    }

}
类MyQuery扩展了查询{
长超时;
}
类MyCursorPreparer实现CursorPreparer{
私有最终查询;
私有最终类类型;
公共MyCursorPreparer(查询,类类型){
this.query=query;
this.type=type;
}
@凌驾
公共数据库游标准备(数据库游标){
//添加超时选项
if(MyQuery的查询实例){
长超时=((MyQuery)查询)。超时;
如果(超时>0){
cursor=cursor.maxTime(超时,时间单位为秒);
}
}
//…做其他准备工作
返回光标;
}
}
类MyTemplate扩展了MongoTemplate{
公共MyTemplate(Mongo Mongo,字符串数据库名){
super(mongo,databaseName);
}
@凌驾
公共列表查找(最终查询、类entityClass、字符串集合名称){
if(查询==null){
返回findAll(entityClass,collectionName);
}
返回doFind(collectionName,query.getQueryObject(),
query.getFieldsObject(),entityClass,
新的MyCursorPreparer(查询,entityClass));
}
@凌驾
public void executeQuery(查询查询、字符串集合名称、DocumentCallbackHandler dch){
executeQuery(查询,collectionName,dch,新建MyCursorPreparer(查询,null));
}
}