Druid配置參數詳解-initialSize
Druid是一個由阿里開源的數據庫連接池,Druid的配置非常豐富,但是設置不當會對生產環境造成嚴重影響,網上Druid的資料雖多,但大部分都是互相復制粘貼,有很多不準確甚至完全錯誤的描述,Druid已經開源很久,而且作者WenShao的工作重心也已經不在Druid上,有些功能估計他自己都不太了解了。本系列將從源代碼的角度分析Druid目前的最新版本(1.1.21)各個常用的配置項的具體含義以及是怎么起作用的。
畫外音:目前Druid在開源中國舉辦的2019年度最受歡迎中國開源軟件中排名第7名,支持Druid的朋友可以去投票哇。2019年度最受歡迎中國開源軟件
initialSize是什么意思?
initialSize:連接池初始化時初始化的數據庫連接數
initialSize在哪個階段會起作用?
當項目第一次進行增,刪,改,查的時候,連接池會初始化,這個時候會根據initialSize參數初始化數據庫連接放入連接池中。
畫外音:這就是為什么第一次進行數據庫操作的時候,響應會比較慢的原因,創建數據庫連接是很耗時的,所以初始化連接并不是越多越好
initialSize是怎么起作用的?
當連接池初始化時,會調用DruidDataSource的init初始化數據庫連接
public void init() throws SQLException {
if (inited) {
return;
}
//....
}
// init connections
//poolingCount是連接池中已有連接數
while (poolingCount < initialSize) {
try {
PhysicalConnectionInfo pyConnectInfo = createPhysicalConnection();
DruidConnectionHolder holder = new DruidConnectionHolder(this, pyConnectInfo);
connections[poolingCount++] = holder;
} catch (SQLException ex) {
LOG.error("init datasource error, url: " + this.getUrl(), ex);
if (initExceptionThrow) {
connectError = ex;
break;
} else {
Thread.sleep(3000);
}
}
}
總結
initialSize的作用是告訴連接池初始化時應該初始化的物理連接數,要注意的是這個值越大,第一次調用數據庫時越慢。