升级新版 mysql-connector-java至8.0.x后,系统进行压测,出现
"http-nio-5366-exec-48" #210 daemon prio=5 os_prio=0 tid=0x00000000023d0800 nid=0x3be9 waiting for monitor entry [0x00007fa4c1400000]
java.lang.Thread.State: BLOCKED (on object monitor)
at org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader.loadClass(TomcatEmbeddedWebappClassLoader.java:66)
- waiting to lock <0x0000000775af0960> (a java.lang.Object)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1186)
at com.alibaba.druid.util.Utils.loadClass(Utils.java:220)
at com.alibaba.druid.util.MySqlUtils.getLastPacketReceivedTimeMs(MySqlUtils.java:372)
大量线程阻塞,发现
class_connectionImpl = Utils.loadClass("com.mysql.jdbc.MySQLConnection"); 中的 com.mysql.jdbc.MySQLConnection在新版本中不存在,同时
Utils.loadClass方法类加载生吞了异常,所以代码逻辑会频繁对不存在的类进行类加载