天天看點

c3p0初始化mysql卡住_問題:Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 啟動卡住...

c3p0初始化mysql卡住_問題:Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 啟動卡住...

image.png

如圖, 程式啟動的時候直接卡在了 Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 這一句,後面就沒日志了。

c3p0初始化mysql卡住_問題:Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 啟動卡住...

image.png

但是稍微看一下jvm狀态:

c3p0初始化mysql卡住_問題:Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 啟動卡住...

image.png

可以發現 程序其實是沒死的,eden區還在緩慢增長。

是以猜測,隻是日志沒列印出來,導緻像卡住了。把日志開到debug級别,再啟動:

c3p0初始化mysql卡住_問題:Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 啟動卡住...

image.png

會發現,其實日志是有的, mybaits一直在加載mapper。

這裡其實是mybatis結合spring時的一個坑,當mapper檔案有文法錯誤時,spring會循環重試。但是。。沒有列印log出來。解決方案是重寫sqlsessionfactory,把日志打出來:

public class MySqlSessionFactory extends SqlSessionFactoryBean {

@Override

protected SqlSessionFactory buildSqlSessionFactory() throws IOException {

try {

return super.buildSqlSessionFactory();

}catch (Exception e){

e.printStackTrace();

throw e;

}finally {

ErrorContext.instance().reset();

}

}

}

然後 factory改成重寫這個:

再重新開機:

c3p0初始化mysql卡住_問題:Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource 啟動卡住...

image.png

日志會很沒明确告訴你哪個檔案 哪一行 什麼錯誤