上段時間,遇到乙個這樣的問題,由於資料顯示的原因,需要往spring boot專案中配置兩個資料庫連線池,乙個是mysql,另外乙個是amazon redshift。
接著前言,當連上兩個資料庫後,發生乙個問題,由於redshift主要定位是資料倉儲,所以對於頻繁的查詢插入操作會比較慢,另外,由於redshift資料庫連線數配置問題,會導致druid連線被遠端關閉。經常性會報500錯誤,實際是time_out。
其實這樣原因也挺正常,remote拒絕連線,所以把我的連線關閉了。
由於資料庫連線的關閉,druid就迴圈嘗試連線,當連線失敗,就會迴圈記錄error:
log.error("create connection outofmemoryerror, out memory. ", e);
首先乙個嘗試連線的執行緒:
@override
public void run()
看runlnternal方法:
private void runinternal()
boolean emptywait = true;
if (createerror != null && poolingcount == 0)
if (emptywait)
// 防止建立超過maxactive數量的連線
if (activecount + poolingcount >= maxactive)
}} finally
physicalconnectioninfo physicalconnection = null;
try catch (outofmemoryerror e) finally
}if (breakafteracquirefailure) finally
return;
}this.errorcount = 0; // reset errorcount
if (closing || closed)
createschedulerfuture = createscheduler.schedule(this, timebetweenconnecterrormillis, timeunit.milliseconds);
return;
}} catch (sqlexception e) finally
}if (breakafteracquirefailure) finally
return;
}this.errorcount = 0; // reset errorcount
if (closing || closed)
createschedulerfuture = createscheduler.schedule(this, timebetweenconnecterrormillis, timeunit.milliseconds);
return;
}} catch (runtimeexception e) catch (error e) finally
log.error("create connection error", e);
// unknow fatal exception
setfailcontinuous(true);
break;
} catch (throwable e)
if (physicalconnection == null)
boolean result = put(physicalconnection);
if (!result)
break;
}}
在runinternal
中,可以看出,乙個for的死迴圈,無限次嘗試連線,所以失敗就記錄錯誤。
最終在console或者log檔案裡,將會有一大片日誌。
我開始嘗試尋找乙個引數,能夠設定嘗試次數,如果超過多少次,就放棄重連,但是沒有找到。。
在**中,不過有乙個這樣引數:
breakafteracquirefailure
由名字可以知道,就是當連線失敗,就不進行嘗試重連,也就是這樣完全放棄重試了。
該值預設是false,也就是預設嘗試連線
由一道題目引發的為穩定與不穩定的排序思路
今天為一道題目傷透了,還是因為自己的腦子不夠機靈,很多地方想的不夠透徹。這個一道很典型的排序題目 這個題目中,我們要求對陣列進行排序,只要就是相同的數字,序號必須在前面的優先,所以這個題目最合適的做法就是使用氣泡排序,不會產生不穩定的問題。我一直使用選擇排序,結果是拍來拍去,最後都是答案錯誤,最後爛...
連線oracle資料庫超時引發的問題。
最近生產庫突然產生客戶端連線時提示超時的現象。生產伺服器上只執行了oracle資料庫。生產伺服器版本windows2008r2 sp1。剛開始懷疑是網路問題。ping伺服器,不丟包,完全正常。tnsping不正常,時好時壞,與客戶端連線超時的現象一致。但在此期間ping伺服器未丟包。登陸伺服器net...
sql mode引發的資料庫問題
前幾天,在本地做完專案,測試完畢後,上傳到線上伺服器的時候,在做很多寫入資料庫的操作時,發現全部發生500報錯,返回的報錯資訊是,某個字段沒有預設值,寫入的時候沒有新增這個字段,該字段在資料表中是not null並且無預設值,導致插入失敗。查詢原因是從本地上傳伺服器專案時,伺服器資料庫由原來的5.6...