Ubuntu下Tomcat部署war包提示root@localhost数据库访问被拒绝问题
报错排查解决思路
- 容器级配置覆盖排查
检查Tomcat的全局配置是否存在同名数据源覆盖了项目配置:查看${TOMCAT_HOME}/conf/context.xml、${TOMCAT_HOME}/conf/server.xml,以及${TOMCAT_HOME}/conf/Catalina/localhost/目录下和你项目路径同名的xml文件,是否存在JNDI数据源配置的用户名是root,且数据源名称和Spring中引用的名称一致,容器级的数据源配置优先级高于项目内的Spring配置。 - 外部配置优先级覆盖排查
Spring配置加载优先级遵循:操作系统环境变量 > JVM启动参数 > 外置配置文件 > 项目内配置文件。可以按以下顺序排查:- 查看Tomcat启动脚本、
setenv.sh中是否配置了spring.datasource.username=root相关的JVM参数 - 查看操作系统环境变量中是否存在Spring数据源相关的配置项
- 检查是否有外置的配置文件放在Tomcat工作目录、项目部署目录下,优先级高于war包内的配置
- 查看Tomcat启动脚本、
- 配置属性&打包正确性排查
- 解压部署的war包,检查内部的application配置文件(.properties/.yml),确认打包时确实将生产环境的tawxin账号配置打包,没有被本地开发的root配置覆盖
- 检查数据源配置的属性名是否匹配连接池要求:比如Hikari连接池的用户名字段为
spring.datasource.hikari.username,如果误写为user会导致读取不到配置,自动使用默认值root
- MariaDB账号权限&连接方式排查
- 登录MariaDB执行
select user,host from mysql.user where user='tawxin';,确认存在tawxin@localhost账号,若只有tawxin@%账号,本地localhost连接时不会匹配该权限 - 在服务器本地执行
mysql -u tawxin -h localhost -p验证账号登录是否正常,再尝试mysql -u tawxin -h 127.0.0.1 -p走TCP连接验证,若127.0.0.1可以登录、localhost不行,说明JDBC URL配置为localhost时走Unix Socket认证失败,可以将JDBC URL中的localhost改为127.0.0.1规避该问题
- 登录MariaDB执行
- 隐式配置来源排查
给Tomcat启动参数添加--debug,启动时查看Spring输出的配置属性加载日志,定位spring.datasource.username的具体加载来源,即可直接找到root配置的注入位置;同时排查项目依赖的二方/三方包是否自动注入了默认配置的数据源。
内容的提问来源于stack exchange,提问作者Nguyen Phong
相关产品推荐
相关产品推荐

