Spring Boot启动卡在Root WebApplicationContext: initialization completed in...

Spring Boot启动 打印Root WebApplicationContext: initialization completed in...这行日志完成后需要等很长时间才能真正启动完成。

分析一下发现是连接某个机器的MySQL就会出现这种情况。使用客户端软件连接MySQL时也很慢,但连接完成后执行MySQL各种语句非常看。查看MySQL链接时,发现所有的链接都会出现unauthenticated user,时间较长,过后就正常中了。

将Spring Boot链接池全部改为1,发现可以较快的启动程序。推测MySQL连接时比较慢导致的,在连接MySQL时,会进行反向DNS查找。经查询发现skip-name-resolve有这么一个参数可以控制,打开mysql的配置文件(my.cnf),在[mysqld]下面增加一行:

skip-name-resolve

重新载入配置文件或者重启MySQL服务即可。

在连接MySQL时,不管连接是通过hosts还是ip的方式,MySQL都会对DNS做反查,IP到DNS,由于反查的接续速度过慢,大量的链接建立比较慢,所以出现程序假死。

为什么要使用"skip_name_resolve"参数?

使用"skip_name_resolve"参数可以提高数据库服务器的性能和安全性。当数据库服务器需要进行用户认证和授权操作时,通常需要获取客户端的IP地址,这样才能判断用户的身份和访问权限。而获取IP地址的常用方式是通过进行DNS解析,将客户端的域名解析为IP地址。然而,DNS解析是一个耗时的过程,可能会对数据库服务器的性能产生一定影响。

此外,启用"skip_name_resolve"参数还可以增强数据库服务器的安全性。在某些情况下,可能存在域名解析的风险,例如,当域名被劫持或者DNS服务器受到攻击时,可能会导致数据库服务器将域名解析为错误的IP地址。这样一来,可能会导致数据库服务器错误地认证和授权了非法用户。通过禁用域名解析,即启用"skip_name_resolve"参数,可以减少被域名劫持和DNS攻击的风险。

参考:

https://www.cnblogs.com/BY1314/p/17946371

https://www.cnblogs.com/_Chill/p/3890339.html

https://wenku.baidu.com/view/b2b5a8405cbfc77da26925c52cc58bd6318693b2.html?wkts=1725269215116&bdQuery=skip-name-resolve

相关推荐
东方芷兰38 分钟前
Leetcode 刷题记录 21 —— 技巧
java·算法·leetcode·职场和发展·github·idea
麦麦大数据38 分钟前
J002 Vue+SpringBoot电影推荐可视化系统|双协同过滤推荐算法评论情感分析spark数据分析|配套文档1.34万字
vue.js·spring boot·数据分析·spark·可视化·推荐算法
kyle~44 分钟前
排序---选择排序(Selection Sort)
java·算法·排序算法
七夜zippoe4 小时前
事务方案选型全景图:金融与电商场景的实战差异与落地指南
java·分布式·事务
杨二K5 小时前
认识HertzBeat的第一天
java·hertzbeat
DevilSeagull5 小时前
JavaScript WebAPI 指南
java·开发语言·javascript·html·ecmascript·html5
期待のcode7 小时前
Spring框架1—Spring的IOC核心技术1
java·后端·spring·架构
鼠鼠我捏,要死了捏7 小时前
Spring Boot Actuator自定义指标与监控实践指南
spring boot·监控·actuator
a栋栋栋7 小时前
wsl 环境下用Docker 安装多版本MySQL
mysql·docker·容器
葵野寺7 小时前
【RelayMQ】基于 Java 实现轻量级消息队列(七)
java·开发语言·网络·rabbitmq·java-rabbitmq