下午遇到一个非常好玩的问题,在这里记一下
一、问题描述
环境说明:项目采用现在的主流的Maven继承方式,我称之为PCBW结构,P模块主要负责项目中所有依赖的jar的版本控制问题(Parent),C模块负责DAO和Service层的数据处理(Core),B就是后台运营展示系统(Boss),D就是前台服务系统(Web);统一使用Maven管理;项目部署在阿里云服务器;
-
具体问题:使用一个Maven命令打包所有的Parent下的所有项目(
clean install -Dmaven.test.skip=true -Pbeta
),上线打包之后出现报错(@之后的机器名字符串我已经修改过),但是同事使用老的打包方式,即一个项目一个项目的clean(分别从Parent开始,对Core,Mgr,Web模块进行clean,install),上传数据库可以访问:- 报错内容如下
java.sql.SQLException: Access denied for user 'root'@'iZsdvn345osev22b5sG' (using password: YES)
- 经查:
-
iZsdvn345osev22b5sG
是服务器的名称; - 数据库中只有
%
用户设置了密码,其他空白;
-
- 报错内容如下
-
初步判定:
- 使用Maven打包的方式(
clean install -Dmaven.test.skip=true -Pbeta
),服务器连接的时候host使用的是机器名称,即上面那段字符串(iZsdvn345osev22b5sG
);而使用Maven自带的单个命令打包的方式(分别从Parent开始,对Core,Mgr,Web模块进行clean,install)上传,就可以访问到数据库,这个时候使用的Host是%
,因为当时只有这个账户有密码; - 问题来了:当问数据库的时候,到底是Host什么时候使用
%
,什么是时候使用<computer-name>
,什么是时候使用127.0.0.1
等等,貌似我们开发的时候不会配置这个,但是有一个地方会配置,那就是设置用户访问权限,但是使用show grants;
查看后也没有得到什么启示
- 使用Maven打包的方式(