Working with Query Runner
Each new
QueryRunner
instance takes a single connection from connection pool, if RDBMS supports connection pooling. For databases not supporting connection pools, it uses the same connection across data source.Use
createQueryRunner
method to create a new QueryRunner
:const queryRunner = dataSource.createQueryRunner()
After you create a new instance of
QueryRunner
use connect
method to actually obtain a connection from the connection pool:const queryRunner = dataSource.createQueryRunner()
await queryRunner.connect()
Important: make sure to release it when it is not needed anymore to make it available to the connection pool again:
await queryRunner.release()
After connection is released it is not possible to use the query runner methods.
QueryRunner
has bunch of methods you can use, it also has its own EntityManager
instance, which you can use through manager
property in order to run EntityManager
methods on a particular database connection used by QueryRunner
instance:const queryRunner = connection.createQueryRunner()
// take a connection from the connection pool
await queryRunner.connect()
// use this particular connection to execute queries
const users = await queryRunner.manager.find(User)
// don't forget to release connection after you are done using it
await queryRunner.release()
Last modified 6mo ago