环境:
jdk21、windows 10
问题描述:
spring boot启动时会打印几行关于hikari的日志,类似下边这种:
2025-02-13 14:55:48.522 INFO 21168 --- [admin-service] [omcat-handler-1] com.zaxxer.hikari.HikariDataSource : HikariCP - Starting...
2025-02-13 14:55:48.729 INFO 21168 --- [admin-service] [omcat-handler-1] com.zaxxer.hikari.pool.HikariPool : HikariCP - Added connection com.mysql.cj.jdbc.ConnectionImpl@1a40ab
2025-02-13 14:55:48.731 INFO 21168 --- [admin-service] [omcat-handler-1] com.zaxxer.hikari.HikariDataSource : HikariCP - Start completed.
第一行表示开始初始化,第三行是初始化结束。我遇到的问题是:从开始初始化到初始化结束,花费的时间超过20秒。
解决方法:
经过层层debug,最终定位到了是jdk中的 Inet4AddressImpl.getHostByAddr()这个方法阻塞导致的。根据名字来看,此方法应该是根据ip查询对应的域名。hikari在初始化连接池时,会以数据库地址作为参数来调用此方法,但是我的数据库是内网部署,ip是192.168.14.33,暂时不知道为啥初始化的时候会调用这个方法。
根据这个线索找了很多方法,最终发现只有修改host文件管用:
打开C:\Windows\System32\drivers\etc\hosts,在其中添加一行解析保存,然后重启程序即可
暂时不知道为啥发生这个问题,不过大概了解了这个问题是出在dns解析上,以上给出的只是个临时的解决办法,后边找到根源后再回来补充一下。