说一下我的情况:
在测试环境中运行没有任何问题,但是导出war包之后,就将war包上传到线上服务器的webapps目录下,然后启动Tomcat,等待Tomcat将上传的war包解压(此时Tomcat没有启动成功,因为用户名和密码不正确),之后我手动修改了解压之后的数据库连接配置文件,然后再重启Tomcat,发现Tomcat启动失败,报错信息就是题目中的数据库用户名密码不正确。
1、通过命令行的mysql -uroot -p输入密码可以登录(证明线上环境的账号和密码正确)
2、使用最基本的JDBC,设置url、username、password,测试没有问题,但是项目就是报错。
尝试过
1、清缓存(包括整个项目的缓存,重新打包发布),电脑和服务器重启了n遍
2、连接mysql的url中增加编码格式:
jdbc_url=jdbc:mysql://127.0.0.1:3306/myDB?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull jdbc_username=root jdbc_password=123456
3、检查jdbc_username和jdbc_password的值前后是否有空格(删除多余的空格)
4、检查是否开启远程连接(已经开启)
上面这几种方式,在我这里并没有产生效果。
自己尝试了一下
重新修改了一下登录用户的权限,看是否有用:
grant all on myDB.* to 'root'@'%' identified by '123456' # 用户名为root,密码为123456的用户,允许其从任意ip登录 # 并且授予该用户对myDB这个数据库下所有表的所有权限(增删改查)
发现没有用。
揭晓答案
如果你仔细看一下我文章开头的描述就应该知道问题出在哪里了,有两个关注点:
1、我在打包之前,数据库配置依旧是测试环境的连接信息。
2、上传到服务器后,居然等解压完成后再手动修改密码,然后再重启Tomcat。
其实问题就出在这两步,而解决方案很简单,就是在打包之前修改数据库连接信息,保证导出的包是线上配置(而不是测试环境的配置)。
因为一旦打包之后,在修改配置文件,是没有效果的。
咱们配置文件中一般会包含线上和线下的配置环境,请在打包之前,将线下环境的配置注释掉,然后删除线上环境的配置:
#offline_jdbc_url=xxxx #offline_jdbc_url=xxxx #offline_jdbc_url=xxxx online_jdbc_url=xxxx online_jdbc_url=xxxx online_jdbc_url=xxxx
当然,如果你不是这个问题,那么你依旧可以尝试一下我上面写的那些方法,看能否解决问题。