首先,在test中找到连接池的测试Demo
在DruidDataSource 这个类中,DruidConnectionHolder 数组存着所有池中的连接
private volatile DruidConnectionHolder[] connections;
接下来,看看getConnections()方法
跟进init()方法看看初始化了什么,可以看到init 方法主要做了下面这些事情
1、根据jdbcUrl判断连接的数据库类型,获取对应的JdbcDriver以及初始化ConnectionChecker。ConnectionChecker会被用于校验连接是否正常。
2、校验参数,主要包括initialSize、maxActive等参数是否合理。
3、初始化 initialSize 个数据库连接,有同步和异步两种方式。可以通过参数配置控制。
4、初始化三个线程
1)LogStatsThread。主要用于周期性的打印dataSource状态。如活跃连接数等。
2)CreateConnectionThread。主要用于补充连接池中的连接。
3)DestroyConnectionThread。用于执行removeAbandoned逻辑。它会判断在activeConnections里的所有连接,如果连接上一次被取用的时间到当前时间的差值大于removeAbandonedTime