有一个选项可以使用maxTime()方法在DBCursor中终止慢查询,我们在Spring数据mongodb查询中是否有等效的方法。
我必须在Spring数据mongodb中杀死特定的慢查询。
请提供您的建议。
感谢。
答案 0 :(得分:1)
有cursor.maxTime
支持的开放式门票(见DATAMONGO-957)。
您可以使用自己的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));
}
}