如何在Typeorm / Typescript中添加请求超时?

问题描述

今天,Typeorm(Postgres)的行为

  • getManager().query(...)
  • getRepositoty().createQueryBuilder(...).getMany()

是无限期地等待响应。

有没有办法引入我可能会错过的请求超时?

如果这不可能,那么Typeorm是否会从其池中公开连接,以便我可以实现超时机制并手动关闭数据库连接?

解决方法

要使用池中的特定连接,请使用createQueryRunner,在文档中没有有关此连接的信息,但在api中有记录。

创建一个查询运行器,用于在单个数据库连接上执行查询。 使用查询运行器,您可以控制查询使用单个数据库连接执行,并且 手动控制您的数据库事务。

用法示例:

const foo = <T>(callback: <T>(em: EntityManager) => Promise<T>): Promise<T> => {
    const connection = getConnection();
    const queryRunner = connection.createQueryRunner();

    return new Promise(async (resolve,reject) => {
        let res: T;
        try {
            await queryRunner.connect();
            // add logic for timeout
            res = await callback(queryRunner.manager);
        } catch (err) {
            reject(err);
        } finally {
            await queryRunner.release();
            resolve(res);
        }
    });
};

,

from the documentation,您可以使用maxQueryExecutionTime ConnectionOption。

maxQueryExecutionTime-如果查询执行时间超过了给定的最大执行时间(以毫秒为单位),则记录器将记录该查询。

ConnectionOptions是您传递给createConnection或在ormconfig中定义的连接配置

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...