天天看点

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

日志会很没明确告诉你哪个文件 哪一行 什么错误