一次由 DNS 反解析引发的 SpringBoot 启动卡顿问题
TL;DR 使用 114 DNS 时,反解析内网 IP 无响应,导致 SpringBoot 启动时 Liquibase 初始化阻塞约 30 秒 InetAddress.getLocalHost() 获取到的可能是127.0.0.1,而非实际的内网 IP(如 192.168.x.x) 现象 SpringBoot启动时(HikariPool 初始化后)卡顿 30s 2025-11-09 15:14:33 INFO [main] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Starting... 2025-11-09 15:14:33 INFO [main] com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Added connection com.p6spy.engine.wrapper.ConnectionWrapper@7f6137fb 2025-11-09 15:14:33 INFO [main] com.zaxxer.hikari.HikariDataSource - HikariPool-1 - Start completed. 排查 通过 jstack 分析线程栈,定位到 liquibase.util.NetUtil.getLocalHostName() 阻塞 # jps jstack 66713 下方线程栈显示阻塞点位于 Inet6AddressImpl.getHostByAddr() "main" #1 prio=5 os_prio=31 cpu=3549.34ms elapsed=14.86s tid=0x000000010a808200 nid=0xd03 runnable [0x000000016fa00000] java.lang.Thread.State: RUNNABLE at java.net.Inet6AddressImpl.getHostByAddr(java.base@17.0.14/Native Method) at java.net.InetAddress$PlatformNameService.getHostByAddr(java.base@17.0.14/InetAddress.java:940) at java.net.InetAddress.getHostFromNameService(java.base@17.0.14/InetAddress.java:662) at java.net.InetAddress.getHostName(java.base@17.0.14/InetAddress.java:605) at java.net.InetAddress.getHostName(java.base@17.0.14/InetAddress.java:577) at liquibase.util.NetUtil.getLocalHostName(NetUtil.java:79) at liquibase.sqlgenerator.core.LockDatabaseChangeLogGenerator.<clinit>(LockDatabaseChangeLogGenerator.java:30) 对应源码: ...