龙空技术网

TypeORM连接池的秘密

我爱瞎BB 45

前言:

目前姐妹们对“连接池代码”大体比较注意,我们都需要知道一些“连接池代码”的相关资讯。那么小编同时在网摘上搜集了一些有关“连接池代码””的相关知识,希望姐妹们能喜欢,朋友们快快来学习一下吧!

TypeORM竟然没有连接池?

根据TypeORM的文档,对于常用的连接选项以及mysql的相关配置项,我们发现竟然没有提供连接池相关的参数,那么TypeORM到底有没有使用连接池呢?答案是当然有。那么它的连接池是怎么创建的?

原码解析

查看原码我们可以知道,在typeorm/connection/Connection.js中可以看到平时我们使用的EntityManager都是通过ConnectManager创建的。数据库的连接都是通过ConnectManager创建的,我们在原码中找到相关的地方。

它是通过driver这个对象创建连接的,那么我们看下这个driver对象是怎么创建的。

如图,driver对象是根据DriverFactory创建出来的,那么我们继续跟踪代码,在typeorm/driver/DriverFactory.js中找到它的create方法做了什么。

根据代码可以看出,DriverFactory会根据不同的type类型调用不同的驱动,我们使用的是mysql,因此我们根据MysqlDriver继续跟踪查看逻辑。

在typeorm/driver/mysql/MysqlDriver.js中终于找到了创建连接池的代码。

那么我们跟着看下createPool中做了些什么。

果然故事还将继续,最终连接池是一个mysql对象闯将的。那么看下这个mysql对象。

我们在loadDependencies方法中找到了这个mysql的赋值逻辑。接下来去PlatformTools看下load实现。

我们在typeorm/platform/PlatformTools.js的load方法中终于明白了,最终是直接依赖于mysql,调用了mysql依赖包实现的createPool。

改进方法

既然使用的是mysql包中的连接池,那么去mysql包中查看readme。Readme中已经示例了连接池的用法,以及相关参数示例

那么接下来我们只需要把对应的参数通过typeorm参数传入即可。

先找到typeorm创建连接池时传入参数的方法createConnectionOptions.

接着改造此方法的逻辑,把mysql连接池的参数传入赋值即可。

标签: #连接池代码