问题复现:
Spring服务在启动的时候经常发现会在一个地方停顿很久,通过日志看到Spring 在初始化 Druid 数据的时候进行了阻塞操作,导致耗时接近2s
耗时对服务本身未造成太大影响,主要在启动的时候浪费了太久的时间
问题排查:
通过日志发现,在执行完 com.alibaba.druid.pool.DruidDataSource#init 该方法后就进行了卡顿,于是猜想是和数据库相关,开启debug验证猜想。
由于代码中引入了 sharding 的配置,所以默认当前的数据库初始化是由 Sharding 调起
Sharding默认初始化Datasource
Sharding在初始化 druidDataSource 时会进行一系列初始化操作,随后扫描当前配置下的所有表结构数据load到 metaData 中,Sharding 的 metaData 里面存储了所有需要路由的表结构
Sharding初始化所有表结构数据